我简单的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
内。
我不想强迫所有花车四舍五入。
答案 0 :(得分:5)
十进制数“22.4”不能完全由二进制浮点数表示,例如float
或double
。所以“将浮点数舍入为22.4”是没有意义的,因为没有浮点数恰好等于22.4。
如果将浮点数转换为输出的十进制字符串,则只能指定精度。您可以使用NSNumberFormatter
或printf格式,例如"%.<precision>f
。