将货币值从JSON转换为NSDecimalNumber

时间:2015-07-08 17:58:52

标签: json swift double currency nsdecimalnumber

我从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)

可以然后将其转换为FloatDouble等Swift类型而不会出现问题。

任何人都知道NSDecimalNumber的问题是什么?或者继续使用FloatDouble是否安全?如果是,哪一个最适合货币价值?

谢谢。

1 个答案:

答案 0 :(得分:8)

错误表示您正在尝试转换为错误的类型。 该值从JSON反序列化为NSNumber,它被无缝桥接到Double本机swift类型。

您应该尝试进行转化:

,而不是投射
NSDecimalNumber(decimal: (json["pending_balance"] as! NSNumber).decimalValue)

NSDecimalNumber(double: json["pending_balance"] as! Double)

但可能还有其他方法可以进行转换。