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 而不是 FloatDouble 是正确的选择。

如果您在应用中使用 Floats 或 Doubles,只需使用例如:

let obj = MyObj(myField: Decimal(myFloat))

然后当您将 MyObj 序列化为 JSON 时,您应该看到:

{
  "myfield": 0.1
}

而不是 0.10000000000000001