Swift 将双精度 0.1 编码为 JSON 为 0.10000000000000001
Swift encodes double 0.1 to JSON as 0.10000000000000001
在使用 0.1 值初始化双精度变量并通过 SwiftyJSON 将其编码为 JSON 后,我在 JSON 结构中收到 0.10000000000000001。
我知道 float/double 和整数之间的精确内存存储差异,但除了使用 %.2f 之类的 sprintf 格式之外,我仍然没有找到针对这种情况的快速修复 - 我不想将字符串放入 json 结构的结果。
任何快速简单的解决方案将不胜感激。
我希望 JSON 的值为 0.1。
如果 double 值为 10,我期望 JSON 中的值为 10。
但是如何在 json 编码操作期间避免此类精度舍入错误?
派对迟到了,但对于其他有同样问题的人 - 将您的字段定义为 Decimal
而不是 Float
或 Double
是正确的选择。
如果您在应用中使用 Floats 或 Doubles,只需使用例如:
let obj = MyObj(myField: Decimal(myFloat))
然后当您将 MyObj 序列化为 JSON 时,您应该看到:
{
"myfield": 0.1
}
而不是 0.10000000000000001
在使用 0.1 值初始化双精度变量并通过 SwiftyJSON 将其编码为 JSON 后,我在 JSON 结构中收到 0.10000000000000001。
我知道 float/double 和整数之间的精确内存存储差异,但除了使用 %.2f 之类的 sprintf 格式之外,我仍然没有找到针对这种情况的快速修复 - 我不想将字符串放入 json 结构的结果。
任何快速简单的解决方案将不胜感激。
我希望 JSON 的值为 0.1。 如果 double 值为 10,我期望 JSON 中的值为 10。 但是如何在 json 编码操作期间避免此类精度舍入错误?
派对迟到了,但对于其他有同样问题的人 - 将您的字段定义为 Decimal
而不是 Float
或 Double
是正确的选择。
如果您在应用中使用 Floats 或 Doubles,只需使用例如:
let obj = MyObj(myField: Decimal(myFloat))
然后当您将 MyObj 序列化为 JSON 时,您应该看到:
{
"myfield": 0.1
}
而不是 0.10000000000000001