Swift: AnyObject 转换为 Float 失败
Swift: AnyObject cast to Float failed
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
显示 nil 而 sss
显示 0.599999998
。为什么投射到 Float
得到零?你们有什么方法可以让我得到正确的结果吗?
0.6
是一个 Double
字面值 。因此,您不能将其转换为 Float
(您需要 转换 它)。
试试这个:
let f = Float(json["progress"] as! Double)
或者,如果您不确定此 AnyObject
包含的数字类型,更安全的方法是:
let f = (json["progress"] as! NSNumber).floatValue
当然,如果缺少 json 值 或 你误判预期类型。如果您不这么认为,请改用 as?
运算符:)
选角速成班。将已知的 Double
值转换为 Float
时,编译器会提醒我们:
let d = 0.6
let f = d as? Float
warning: cast from 'Double' to unrelated type 'Float' always fails
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
显示 nil 而 sss
显示 0.599999998
。为什么投射到 Float
得到零?你们有什么方法可以让我得到正确的结果吗?
0.6
是一个 Double
字面值 。因此,您不能将其转换为 Float
(您需要 转换 它)。
试试这个:
let f = Float(json["progress"] as! Double)
或者,如果您不确定此 AnyObject
包含的数字类型,更安全的方法是:
let f = (json["progress"] as! NSNumber).floatValue
当然,如果缺少 json 值 或 你误判预期类型。如果您不这么认为,请改用 as?
运算符:)
选角速成班。将已知的 Double
值转换为 Float
时,编译器会提醒我们:
let d = 0.6
let f = d as? Float
warning: cast from 'Double' to unrelated type 'Float' always fails