我正在初始化一个类的实例,该类测试两个公式的相等性。
公式的计算值实际上相等:

RubyChem::Chemical.new("SOOS").fw
=> 96.0

RubyChem::Chemical.new("OSSO").fw
= 96.0

当我创建一个新类来检查这两个实例的相等性时,我对结果有点吃惊:
x = RubyChem::BalanceChem.new("SOOS","OSSO")
x.balanced
=>false

y = RubyChem::BalanceChem.new("SOOS","SOOS")
y.balanced
=> true

rubychem::balancechem初始化方法如下:
def initialize(formula1, formula2)
  @balanced = RubyChem::Chemical.new(formula1).fw == RubyChem::Chemical.new(formula2).fw
end

为什么ruby不获取formula1和formula2的fw值并检查这些值的相等性?ruby的操作顺序是什么,ruby在做什么?我看得出我对这个问题缺乏了解。我该怎么做?提前谢谢你。

最佳答案

您可能不想检查浮点数是否相等。相反,你应该比较三角形。
在IRB中试试这个:

x = 1.000001
y = 1.0
x == y
(x-y).abs < 0.00001

所以,你会发现一个类似于0.00001的delta,你觉得它可以处理浮点运算中的任何变化,并以此方式使用它。你永远不应该==浮动。

08-25 22:49