Swift将双0.1编码为JSON编码为0.10000000000000001

时间:2019-06-27 06:58:31

标签: json swift type-conversion precision swifty-json

在将一个双精度变量初始化为0.1值并通过SwiftyJSON将其编码为JSON之后,我收到了JSON结构中的0.10000000000000001。

我知道浮点数/双精度数和整数之间的精确内存存储差异,但是除了使用%.2f之类的sprintf格式外,我仍然没有找到针对这种情况的快速解决方案-我不想将结果放在字符串转换成json结构。

任何快速,简便的解决方案将不胜感激。

我希望JSON中的值为0.1。 如果double值为10,则我希望JSON中的值为10。 但是如何避免在json编码操作期间出现这种精度舍入错误?

1 个答案:

答案 0 :(得分:1)

聚会迟到但对于其他有同样问题的人 - 将您的字段定义为 Decimal 而不是 FloatDouble 是要走的路。

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

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

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

{
  "myfield": 0.1
}

而不是 0.10000000000000001