Swift 3.0将String转换为Double返回nil?

1 string double null json swift3

尝试做这么简单的事情,但是对我来说根本行不通。

码:

let long = index["Longitude"] as! String
let lat = index["Latitude"] as! String

print(long as Any)
print(lat as Any)

let doubleLong = Double(long)
print(doubleLong as Any)
Run Code Online (Sandbox Code Playgroud)

调试输出:

-85.1113644443208 
32.880541654362 
nil
Run Code Online (Sandbox Code Playgroud)

^^^为什么这么零?我将添加这是从JSON响应中提取的。也许这与它有关。

Sul*_*han 5

请注意,您的数据很可能还有额外的空间,请注意:

print(Double("-85.1113644443208")) // => Optional(-85.111364444320799)
print(Double("-85.1113644443208 ")) // => nil
print(Double(" -85.1113644443208")) // => nil
Run Code Online (Sandbox Code Playgroud)

尝试先修剪空间:

let doubleLong = Double(long.trimmingCharacters(in: CharacterSet.whitespaces))
Run Code Online (Sandbox Code Playgroud)

或使用NumberFormatter进行解析:

let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
numberFormatter.locale = Locale(identifier: "en_US_POSIX")

print(numberFormatter.number(from: "-85.1113644443208") as Double?) // => Optional(-85.111364444320799)
print(numberFormatter.number(from: " -85.1113644443208") as Double?) // => Optional(-85.111364444320799)
print(numberFormatter.number(from: "-85.1113644443208 ") as Double?) // => Optional(-85.111364444320799)
Run Code Online (Sandbox Code Playgroud)