ruby-1.8.7 > 1.55.round(1)
=> 1.6
ruby-1.8.7 > 1.555.round(2)
=> 1.56
ruby-1.8.7 > 1.155.round(2)
=> 1.16
ruby-1.8.7 > 10.156.round(2)
=> 10.16
ruby-1.8.7 > 10.155.round(2)
=> 10.15
ruby-1.8.7 > 10.165.round(2)
=> 10.16怎么回事?我是不是遗漏了什么?
编辑
ruby-1.9.2 > 10.155.round(2)
=> 10.15
ruby-1.9.2 > 10.165.round(2)
=> 10.16发布于 2012-01-05 12:31:05
浮点值不精确。您的10.165在纸/屏幕上表示为10.165,但在内存中它表示的东西非常接近10.165.它是向上的还是向下的,是一个错误的方向的问题。
如果需要精确处理小数,可以将它们表示为BigDecimal (用十进制/精度表示法),也可以表示为Rational (用分数分子/分母表示法)。
发布于 2012-01-09 13:06:34
Python很好地解释了二进制浮点数的基本限制:http://docs.python.org/tutorial/floatingpoint.html。
https://stackoverflow.com/questions/8742268
复制相似问题