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就出错呢?

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

2个回答

用基于二进制的浮点数表示十进制小数,结果不正常才是正常的。所有使用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

iteye_1858
iteye_1858 1. 输出时四舍五入到实际需要的精度 2. 判断相等时不要用x == y,改用(x-y) < 1e-6 (假定你需要的精度是小数点后6位)
大约 7 年之前 回复
weixin_42502790
♞♛♞ 谢谢你,我明白了。请问,那怎么才能进行正常的 0.011*100 这样的计算呢?
大约 7 年之前 回复
  1. 输出时四舍五入到实际需要的精度
  2. 判断相等时不要用x == y,改用(x-y) < 1e-6 (假定你需要的精度是小数点后6位)
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问