3
let json = [
    "left" : 18,
    "deadline" : "May 10",
    "progress" : 0.6
] as [String: AnyObject]

let ss = json["progress"] as? Float
let sss = json["progress"] as? Double
print("ss = \(ss)\n  sss = \(sss)")

我不知道为什么ss演出为零而sss演出0.599999998。为什么强制转换Float为零?你们有什么方法可以让我得到正确的结果吗?

4

1 回答 1

2

文字0.6值。因此,您不能将其转换为(您需要转换它)。Double Float

试试这个:

let f = Float(json["progress"] as! Double)

或者,如果您不确定这是什么类型的数字AnyObject,更安全的方法是:

let f = (json["progress"] as! NSNumber).floatValue

当然,如果缺少 json 值或者您误判了预期的类型,上述那些将很难as!崩溃。如果您有其他感觉,请改用运算符:)as?


铸造速成班。当将已知Double值转换为 aFloat时,编译器会为我们提供一个很好的提示:

let d = 0.6
let f = d as? Float

警告:从 'Double' 转换为不相关的类型 'Float' 总是失败

于 2017-04-26T01:36:14.647 回答