比较浮点数和小整数

lvjbypge  于 2022-09-21  发布在  其他
关注(0)|答案(1)|浏览(244)

如果我有

f: Single;
F := 0;
if F <> 0 then raise exception.create('xxx');

这种比较在任何平台都行吗?我的意思是,在某些平台上,我是否需要进行舍入(F)<>0?我知道在Windows上计算F<>0很好,因为0是一个整数,但我对其他平台很好奇

l2osamch

l2osamch1#

在标题中,你问一个一般性的答案,在正文中,你问一个具体的案例。我不确定你真正感兴趣的是哪一个答案。但一般而言,答案是“视情况而定”。

正如其他人所评论的那样,您的特定示例永远不会引发,但这并不意味着可以安全地将浮点数与0进行比较。

以这个例子为例:

procedure TForm5.Button1Click(Sender: TObject);
var
  F: single;
begin
  F := (7 / 10);
  F := F - 0.7;
  if F <> 0 then
    raise Exception.Create('Error Message');
end;

据我所知,这会一直被提出来。

此外,round(f) <> 0也不是解决这一问题的方法。Comparevalue(F, 0, ????) <> EqualsValue应该是。

至于这一切的“为什么”,这一问题已经得到了(可能是无数次)的回答。(您可以从这里开始)

相关问题