在 Swift 中将字符串转换为双精度数 (Xcode v 7.0.1)

Converting a String to a Double in Swift (Xcode v 7.0.1)

我在 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
}

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

已修复:原来有额外的白色 space 字符 (spaces) 被添加到“36.97736”的前面并且 Swift 抱怨该字符串不是Double 格式,所以它返回 nil。

在 Swift 2.0 中,您可以使用 Double("String"),其中 returns 是可选的。以下是如何在您的代码中使用它

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

你可以试试这个:

extension String  {

    var asDouble : Double? {
        if let d = Double(self) {
            return d
        }
        return nil
    }
}


let s = "21.5"    
s.asDouble

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

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")
 }