【问题标题】:Converting a String to a Double in Swift (Xcode v 7.0.1)在 Swift 中将字符串转换为 Double (Xcode v 7.0.1)
【发布时间】:2015-10-15 23:05:25
【问题描述】:

我在 Swift 中将 String 转换为 Double 出奇的困难。只是为了让您大致了解我在做什么,我正在解析一个 XML 文件并从某些元素中检索值。代码是这样的,

var lat = ""
var lati = 0.0

func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {

    if elementName == "lat" {
        self.lat = foundCharacters
        self.lati = (self.lat as NSString).doubleValue
    }

}

当我打印self.lat 时,坐标输出为字符串“36.97736”。但是,当我打印 self.lati 时,会打印 Double 0.0。

我也试过

self.lat = foundCharacters
let formatter = NSNumberFormatter()
formatter.locale = NSLocale(localeIdentifier: "en_US")
if let decimalAsDoubleUnwrapped = formatter.numberFromString(self.lat)       {
    self.lati = decimalAsDoubleUnwrapped.doubleValue
}

我得到了和以前一样的结果。

已修复:原来在“36.97736”的前面添加了额外的空白字符(空格),Swift 抱怨该字符串不是 Double 格式,所以它返回 nil。

【问题讨论】:

    标签: xcode string swift casting double


    【解决方案1】:

    在 Swift 2.0 中,您可以使用 Double("String") 返回一个可选值。以下是如何在您的代码中使用它

        lat = foundCharacters //not mentioned in the function btw
        if let doubleFromlat = Double(lat) {
            lati = doubleFromlat
        } else { print("foundCharacters does not hold double") }
    

    【讨论】:

    • 感谢您的回复。我试过这个,它一直在 else 声明。我打印了latlat 将坐标作为字符串。然后我打印了Double(lat),我得到了nil for Double(lat)
    • 发现了什么字符?我认为这就是当您将 lat 分配给 foundCharacters 时它失去其价值的地方。尝试在该作业之后打印 lat
    • 它是“36.97736”,但前面打印了 4 个空格。此外,“36.97736”上方还会打印一个新行。我尝试修剪空白,但也没有用。
    【解决方案2】:

    你可以试试这个:

    extension String  {
    
        var asDouble : Double? {
            if let d = Double(self) {
                return d
            }
            return nil
        }
    }
    
    
    let s = "21.5"    
    s.asDouble
    

    【讨论】:

    • 谢谢。我知道现在是什么问题。 Swift 没有将“36.97736”识别为 Double,因此 self.lati = (self.lat as NSString).doubleValuenil 分配给 self.lati。为什么会发生这种情况?
    【解决方案3】:

    使用NSNumberFormatter().numberFromString(:)?.doubleValue。因此,在您发布的 sn-p 的上下文中:

    let foundCharacters = "12.345"
    let lat = foundCharacters
    var lati: Double
    
    if let doubleFromlat = Double(lat) {
        let lati = NSNumberFormatter().numberFromString(foundCharacters)?.doubleValue
     } else {
        print("foundCharacters does not hold double")
     } 
    

    【讨论】:

      猜你喜欢
      • 2015-10-23
      • 1970-01-01
      • 2014-11-18
      • 1970-01-01
      • 2014-05-01
      • 1970-01-01
      • 2018-07-13
      • 2011-06-30
      • 1970-01-01
      相关资源
      最近更新 更多