有什么方法可以告诉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异常,而无法从中恢复 或精度下降。
在整个s.o中都记录了围绕愚蠢的快速小数的斗争。 特别是在这里:
答案 0 :(得分:4)
问题在于,JSONDecoder
只是JSONSerialization
的包装器,它在内部将十进制数解码为Double
,并且只有在将其转换为Decimal
之后才解码。可悲的是,除非您创建自己的JSON解码器,否则在使用JSON中的数字小数时将无法解决此问题。
当前唯一可行的解决方法是更改后端以将所有十进制数字作为String
发送,然后将其解码为Decimal
后再将其转换为String
。
有关更多信息,请查看以下打开的Swift错误:SR-7054。