gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 06:11:10 24 4
gpt4 key购买 nike

有什么方法可以告诉 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 Decimal 的斗争在整个 s.o. 中都有记录。特别是这里:

Making NSDecimalNumber Codable

最佳答案

问题是 JSONDecoder 只是 JSONSerialization 的包装器,它在内部将十进制数解码为 Double,并且仅在将它们转换为 十进制。遗憾的是,除非您创建自己的 JSON 解码器,否则在使用 JSON 中的数字小数时无法解决此问题。

目前唯一可能的解决方法是更改​​后端以将所有十进制数作为 String 发送,然后在将它们解码为 String 后将它们转换为 Decimal s.

有关更多信息,请查看这个开放的 Swift 错误:SR-7054 .

关于swift - 如何在不损失精度的情况下解码 NSDecimalNumber?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56805881/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com