Delphi - 比较浮点值

时间:2014-07-19 17:17:51

标签: delphi floating-point numbers compare decimal

我有一个返回浮点值的函数:

1.31584870815277

我需要一个函数,它返回TRUE,比较值和点后面的两个数字。

示例:

if 1.31584870815277 = 1.31 then ShowMessage('same');

抱歉我的英文。

有人能帮助我吗?感谢

2 个答案:

答案 0 :(得分:11)

您的问题规范有点模糊。例如,您声明要比较小数点后的值。在这种情况下,这意味着你希望1.31被认为等于2.31。

除此之外,您还需要指定要考虑的小数位数。像1.31这样的数字在二进制浮点中不能完全表示。根据您使用的类型,closest representable value可能小于或大于1.31。

我的猜测是你想要做的是使用round到最近,到特定的小数位数。为此,您可以使用Math单元中的SameValue功能。在你的情况下,你会写:

SameValue(x, y, 0.01)

测试平等,最高容差为0.01

这可能不是您正在寻找的,但从您的问题中可以清楚地看出,您还不确切知道自己在寻找什么。如果您的需求与值的十进制表示特别相关,则考虑使用十进制类型而不是二进制类型。在Delphi中,Currency

答案 1 :(得分:0)

如果速度不是最高优先级,则可以使用字符串转换:

    if Copy(1.31584870815277.ToString, 1, 4) = '1.31' then ShowMessage('same');