【问题标题】:NSJSONSerialization.JSONObjectWithData float conversion/rounding error?NSJSONSerialization.JSONObjectWithData 浮点转换/舍入错误?
【发布时间】:2013-03-22 12:01:11
【问题描述】:

我的简单 RubyMotion 代码:

data = DataParser.parse(url)
error_ptr = Pointer.new(:object)
json = NSJSONSerialization.JSONObjectWithData(data, options: 0, error: error_ptr)

url 是一个天气 API,它提供带有温度的 JSON,例如 { "temp_c":22.4, ... }。奇怪的是,浮点 22.4 被转换为 22.3999938964844

如果我检查data.to_s,温度读数为22.4,所以我认为错误在NSJSONSerialization.JSONObjectWithData 内。

  • 谁能证实这一点?
  • 对此有通用解决方案吗?

我不想强制对所有浮点数进行舍入。

【问题讨论】:

    标签: objective-c ruby json rubymotion rounding-error


    【解决方案1】:

    十进制数“22.4”不能用二进制浮点数精确表示,例如floatdouble。所以“将浮点数舍入到 22.4” 没有意义,因为没有完全等于 22.4 的浮点数。

    只有将浮点数转换为十进制字符串进行输出时,才能指定精度。您可以使用NSNumberFormatter 或像"%.<precision>f 这样的printf 格式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-15
      • 2014-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多