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
答案 0 :(得分:4)
浮点值不准确。你的10.165在纸上/屏幕上显示为10.165,但在内存中它表示为非常接近10.165的内容......无论是向上还是向下舍入都是错误发生的方向。
如果您需要准确处理小数,您可以将它们表示为BigDecimal(带小数位/精度表示法),或者表示为Rational(带小数分子/分母表示法)。
答案 1 :(得分:2)
Python文档很好地解释了二进制浮点数的基本限制:http://docs.python.org/tutorial/floatingpoint.html