我从API获得以下JSON响应。
{
"status": "success",
"data": [
{
"actual_price": 30,
"offered_deal_price": 16,
"pending_balance": 12.8
}
]
}
所有这些价值都是价格。这意味着它们可以是圆值或浮动值。
我read您应该使用NSDecimalNumber
类型作为货币值。我在转换这些JSON值时遇到了问题。
这样做,
json["pending_balance"] as! NSDecimalNumber
因以下错误而失败。
无法转换类型' __ NSCFNumber'的值(0x10423ccf0)到' NSDecimalNumber' (0x1046cf1f0)
尝试将其投放到NSDecimal
会产生此
无法转换类型' __ NSCFNumber'的值(0x7f9102f79f68)到C.NSDecimal' (0x10f23d6e0)
我可以然后将其转换为Float
或Double
等Swift类型而不会出现问题。
任何人都知道NSDecimalNumber
的问题是什么?或者继续使用Float
或Double
是否安全?如果是,哪一个最适合货币价值?
谢谢。
答案 0 :(得分:8)
错误表示您正在尝试转换为错误的类型。
该值从JSON反序列化为NSNumber
,它被无缝桥接到Double
本机swift类型。
您应该尝试进行转化:
,而不是投射NSDecimalNumber(decimal: (json["pending_balance"] as! NSNumber).decimalValue)
或
NSDecimalNumber(double: json["pending_balance"] as! Double)
但可能还有其他方法可以进行转换。