我们正面临数据类型双重比较的问题:
if(p > pmax) then begin Showmessage(''); end
如果这两个值都是100(p = 100和pmax = 100),那么它也将进入if子句。
解决方法
有几个比较双打的概率。一个问题是,你所看到的并不完全是由于四舍五入而得到的。您可以拥有99.999999996423和100.00000000001632,它们都被舍入为100,但它们不相等。
解决方案是使用边距。所以如果两个双打的差异在边际范围之内,你就接受他们的平等。
您可以使用margin作为可选参数创建IsEqual函数:
function IsEqual(const ANumber1,ANumber2: Double; const AMargin: Double = cMargin): Boolean; begin Result := Abs(ANumber1-ANumber2) <= AMargin; end;