3

我简单的 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.

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

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

4

1 回答 1

5

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

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

于 2013-03-22T12:33:49.503 回答