json - 将货币值从 JSON 转换为 NSDecimalNumber

标签 json swift double currency nsdecimalnumber

我从 API 获得以下 JSON 响应。

{
  "status": "success",
  "data": [
    {
      "actual_price": 30,
      "offered_deal_price": 16,
      "pending_balance": 12.8
    }
  ]
}

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

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

这样做,

json["pending_balance"] as! NSDecimalNumber

因以下错误而失败。

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

尝试将其转换为 NSDecimal 导致了这个

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

不过,我可以将它毫无问题地转换为 FloatDouble 等 Swift 类型。

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

谢谢。

最佳答案

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

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

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

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

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

关于json - 将货币值从 JSON 转换为 NSDecimalNumber,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31300215/

相关文章:

vba - 使用 double 进行错误处理不起作用 - VBA excel

java - Java中Math.exp函数的限制

java - JBoss 10 当我将 XML 更改为 JSON 格式以将数据从客户端发送到 REST 端点时,我出现客户端 java.lang.NoClassDefFoundError

c# - 如何在C#中反序列化json对象

javascript - AngularJS 工厂返回 State 对象而不是来自 Promise 的 JSON 数据

ios - 如何使用 strftime 在 Swift 中格式化字符串

javascript - Node js : access json if variable name in string?

ios - 如何将图像从 AWS S3 加载到 UICollectionView 中?

swift - 一个非常奇怪的字符串转换错误

c - 用随机数和字母初始化c中的2d矩阵