将货币值从 JSON 转换为 NSDecimalNumber

Casting currency values from JSON to NSDecimalNumber

我从 API.

收到以下 JSON 回复
{
  "status": "success",
  "data": [
    {
      "actual_price": 30,
      "offered_deal_price": 16,
      "pending_balance": 12.8
    }
  ]
}

所有这些值都是价格。这意味着它们可以是整数值或浮动值。

您应该使用 NSDecimalNumber 类型作为货币值。我在转换这些 JSON 值时遇到问题。

这样做,

json["pending_balance"] as! NSDecimalNumber

因以下错误而失败。

无法将“__NSCFNumber”类型的值 (0x10423ccf0) 转换为 'NSDecimalNumber' (0x1046cf1f0)

尝试将其转换为 NSDecimal 结果是

无法将“__NSCFNumber”类型的值 (0x7f9102f79f68) 转换为 'C.NSDecimal' (0x10f23d6e0).

可以 但是,将它转换为 Swift 类型,如 FloatDouble 没有问题。

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

谢谢。

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

与其转换,不如尝试转换:

NSDecimalNumber(decimal: (json["pending_balance"] as! NSNumber).decimalValue)

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

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