ruby不会乘除法了,这是ruby1.9.3的bug吗?

环境ruby1.8.7下
irb(main):002:0> 0.011*100
=> 1.1
这是正常的。

而在环境ruby1.9.3下
irb(main):008:0> 0.011*100
=> 1.0999999999999999

0.011 * 1000都不会有错,为什么乘100就出错呢?

有哪位大侠能指点一下吗?

用基于二进制的浮点数表示十进制小数,结果不正常才是正常的。所有使用IEEE 754浮点数标准的语言都有这个问题,跟Ruby本身无关。

irb(main):001:0> 0.5-0.4
=> 0.09999999999999998
irb(main):002:0> 0.4-0.3
=> 0.10000000000000003

scala> 0.5-0.4
res0: Double = 0.09999999999999998
scala> 0.4-0.3
res1: Double = 0.10000000000000003

  1. 输出时四舍五入到实际需要的精度
  2. 判断相等时不要用x == y,改用(x-y) < 1e-6 (假定你需要的精度是小数点后6位)