漂浮在红宝石的圆形虫?

时间:2012-01-05 12:09:37

标签: ruby floating-point rounding

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

2 个答案:

答案 0 :(得分:4)

浮点值不准确。你的10.165在纸上/屏幕上显示为10.165,但在内存中它表示为非常接近10.165的内容......无论是向上还是向下舍入都是错误发生的方向。

如果您需要准确处理小数,您可以将它们表示为BigDecimal(带小数位/精度表示法),或者表示为Rational(带小数分子/分母表示法)。

答案 1 :(得分:2)

Python文档很好地解释了二进制浮点数的基本限制:http://docs.python.org/tutorial/floatingpoint.html