NSJSONSerialization.JSONObjectWithData浮点转换/舍入错误?

时间:2013-03-22 12:01:11

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

我简单的RubyMotion代码:

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

该网址是一个天气API,可提供温度为{ "temp_c":22.4, ... }等浮点数的JSON。奇怪的是,浮动 22.4 会转换为 22.3999938964844

如果我检查data.to_s温度读数为22.4,那么我认为错误位于NSJSONSerialization.JSONObjectWithData内。

  • 有人能证实吗?
  • 这是否有共同的解决方案?

我不想强迫所有花车四舍五入。

1 个答案:

答案 0 :(得分:5)

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

如果将浮点数转换为输出的十进制字符串,则只能指定精度。您可以使用NSNumberFormatter或printf格式,例如"%.<precision>f