Ruby在舍入中有错误吗?为什么它的行为如下:
>> [1.14, 1.15, 1.16].map{|x| "%.1f" % x}
=> ["1.1", "1.1", "1.2"]
>> [1.4, 1.5, 1.6].map{|x| "%.0f" % x}
=> ["1", "2", "2"]
如同,为什么1.15四舍五入到1.1,但1.5舍入为2?至少,这不一致吗? ruby 1.9.1和ruby 1.8.7中的行为相同。
答案 0 :(得分:5)
答案 1 :(得分:2)
您正在使用浮点数。浮点数不精确。有关标准的介绍,请参阅http://en.wikipedia.org/wiki/IEEE_754-2008。
简短版本是:永远不要使用浮动任何需要精确度的任何东西!
答案 2 :(得分:1)
回想起来也很有用,而且考虑起来也很讽刺,但浮点数只能代表:( a)几个分数或(b)所有整数。
因此,为了得到精确的表示,分数必须由2的(负)幂组成。因此,以下分数是.01和.99之间唯一完全代表的分数:
0.25
0.50
0.75
换句话说,FP在处理整数时非常准确。去图。