如何在不损失精度的情况下解码 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.
的数字小数时无法解决此问题
目前唯一可行的解决方法是更改后端以将所有十进制数作为 String
s 发送,然后在将它们解码为 String
s 后将其转换为 Decimal
s。
有关详细信息,请查看此打开的 Swift 错误:SR-7054。
有什么方法可以告诉 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.
目前唯一可行的解决方法是更改后端以将所有十进制数作为 String
s 发送,然后在将它们解码为 String
s 后将其转换为 Decimal
s。
有关详细信息,请查看此打开的 Swift 错误:SR-7054。