一天中的美好时光,我
将 Windows 10 中的系统DecimalSeparator从更改,为.
我检查了下一个选项,我有点不明白:为什么它会发出falseif q=0.01?
为了正确解决这个例子,我必须编写以下函数,例如:
function TFMain.RETURN_VALUE(ANumber: double):double;
begin
Result := ANumber;
end;
procedure TFMain.Button1Click(Sender: TObject);
var
q: double;
begin
q := 0.02 - 0.01;
if q = RETURN_VALUE(0.01) then
showmessage('=')
else showmessage('><') ;
end;
这会产生正确的结果(系统分隔符左“逗号”)。
可以更容易吗?

使用什么作为小数分隔符并不重要,正确比较实数很重要,因为它们在硬件中实现的特殊性(Donald Knuth 2 卷,第 4 章,如果我没记错的话,很好地描述了这些微妙之处,但也可以在网上找到)。这是代码:
会给你平等。
SameValue描述为的功能它也非常有用,因为它允许您比较 epsilon 邻域中的两个数字。因此,如果您正在进行数学计算,
SameValue请将其与所需的值一起使用Epsilon,这将为您提供所需的精度。如果Epsilon不指定或不指定零,那么会根据这个公式自动计算:Epsilon = Max(Min(Abs(A), Abs(B)) * 1E-12, 1E-12)