如何在不损失精度的情况下解码 NSDecimalNumber?

How would I decode a NSDecimalNumber without loss of precision?

有什么方法可以告诉 JSONDecoder 将传入的小数转换为 字符串?

 public struct Transaction: Decodable
 {
    public let total: NSDecimalNumber?


    enum CodingKeys: String, CodingKey {
        case total = "AMOUNT"

    }

    public init(from decoder: Decoder) throws
    {
        let values = try decoder.container(keyedBy: CodingKeys.self)
        let total = try values.decode(Decimal.self, forKey: .total)
        self.total = NSDecimalNumber(decimal: total);
    }

 }

考虑当 AMOUNT 类似于 397289527598234759823475455622342424358363514.42 时会发生什么

我想使用我拥有的代码我会得到 nonConformingFloatDecodingStrategy 异常,无法从中恢复 或精度损失。

围绕白痴的斗争 swift 十进制在整个 s.o 中都有记载。 特别是这里:

问题是 JSONDecoder 只是 JSONSerialization 的包装器,它在内部将十进制数解码为 Double,并且仅在将它们转换为 Decimal 之后。遗憾的是,除非您创建自己的 JSON 解码器,否则在使用来自 JSON.

的数字小数时无法解决此问题

目前唯一可行的解​​决方法是更改​​后端以将所有十进制数作为 Strings 发送,然后在将它们解码为 Strings 后将其转换为 Decimals。

有关详细信息,请查看此打开的 Swift 错误:SR-7054