我在Ruby(Aptana IDE)中执行了以下代码行
puts 3.3 - 2.7 == 0.6 #which should be true
我得到的结果是
false
然后我执行了
puts 3.3 - 2.7
并得到结果为
0.5999999999999996
有人可以解释发生了什么吗?为什么我得到0.5999999999999996而不是0.6?
浮点数不能精确地表示所有实数,并且浮点运算不能精确地表示真实算术运算,这导致了许多令人惊讶的情况。
我建议阅读:https : //en.wikipedia.org/wiki/Floating_point#Accuracy_problems
在Ruby中处理此问题的正确方法是使用BigDecimal
类
> require 'bigdecimal'
true
> a = BigDecimal.new('3.3')
3.3
> b = BigDecimal.new('2.7')
2.7
> c = BigDecimal.new('0.6')
0.6
> a - b == c
true
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句