如果我有
f: Single; F := 0; if F <> 0 then raise exception.create('xxx');
这种比较在任何平台都行吗?我的意思是,在某些平台上,我是否需要进行舍入(F)<>0?我知道在Windows上计算F<>0很好,因为0是一个整数,但我对其他平台很好奇
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应该是。
round(f) <> 0
Comparevalue(F, 0, ????) <> EqualsValue
至于这一切的“为什么”,这一问题已经得到了(可能是无数次)的回答。(您可以从这里开始)
1条答案
按热度按时间l2osamch1#
在标题中,你问一个一般性的答案,在正文中,你问一个具体的案例。我不确定你真正感兴趣的是哪一个答案。但一般而言,答案是“视情况而定”。
正如其他人所评论的那样,您的特定示例永远不会引发,但这并不意味着可以安全地将浮点数与0进行比较。
以这个例子为例:
据我所知,这会一直被提出来。
此外,
round(f) <> 0
也不是解决这一问题的方法。Comparevalue(F, 0, ????) <> EqualsValue
应该是。至于这一切的“为什么”,这一问题已经得到了(可能是无数次)的回答。(您可以从这里开始)