【发布时间】:2019-06-28 11:12:34
【问题描述】:
有没有办法告诉 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. 中都记录了围绕愚蠢的 swift Decimal 的斗争。 特别是这里:
【问题讨论】:
-
你必须把它作为
String在你的JSON开头,否则它会先把它转换成Double,然后再转换成你的类型。 -
是的@LeoDabus,这仅适用于您自己编码和解码值的情况,并且对于您无法控制的远程系统的数据完全有用
-
@AntonTropashko 试试这个stackoverflow.com/a/55131900/2303865
标签: swift codable nsdecimalnumber jsondecoder