【发布时间】:2021-11-05 05:23:10
【问题描述】:
我需要测试一个双精度数是否为整数。基本上这是规则的一个例子:
- 5.0 > 真
- 5.2 > 错误
为了做到这一点,我会创建一个if (result mod 1) = 0 then 并查看它是否返回真或假。考虑result 是双精度。顺便说一句,编译器给了我这个错误:
[dcc32 Error] Unit1.pas(121): E2015 Operator not applicable to this 操作数类型
我该如何解决这个问题?请注意,我的数字采用这种格式##.#####,所以我在浮点精度方面没有太多问题。
一般我会使用if (result % 1 == 0) {},但在 Delphi 中这不起作用。
【问题讨论】:
-
您可以检查分数是否接近于零。 “math”有“IsZero”,您可以提供一个 epsilon。
-
一个精确的整数,还是足够接近?如果只是一个精确的整数,请记住像
0.2 + 0.2 + 0.2 + 0.2 + 0.2这样的简单事物不一定会计算为精确的整数。如果足够近,多近? -
@SertacAkyuz 你可以这样做,但是将 1 变为 1.0000001 的舍入误差百分比将 1000000 变为 1000000.1。只看小数部分而不考虑大小可能不是一个好主意。
-
@hvd - 如果差异太大,您可以根据大小提供不同的 epsilon。
-
检查这个简单的解决方案,希望对某人有所帮助:stackoverflow.com/a/62449962/8545027
标签: delphi