或者操作是否有可能失败?
谢谢.
我选择了错误的术语,我真正的意思是四舍五入到0,而不是截断.
关键是,我需要比较两个双精度的整数部分,我只是将它们转换为int然后使用==,但是,正如有人在我之前的一个问题中指出的那样,这可能会引发溢出异常,如果double不能适合整数.
所以问题是'使用==运算符来比较之前舍入为0的两个双精度是否正确,或者我应该坚持使用cast to int方法并捕获可能的异常?
这是更新后的网站,它讨论了几种比较浮点数的方法的优缺点.(你仍然可以在这里查看旧网站.)
我采用的方法是"相对误差"方法.找出两个数字之间的差异,将其转换为数字的百分比,如果该百分比足够小,那么你就是平等的.
更糟糕的是,有时,即使是完全相同的数字,它也会失败.这是因为某些编译器或处理器将在CPU寄存器中使用比在存储器中更多的精度位(例如,MSVC具有3个不同的浮点行为选项).因此,最近计算的值可能不会截断这些位并且看起来不相等.永远不要在浮点数上使用==.