【问题标题】:Delphi - Comparing float valuesDelphi - 比较浮点值
【发布时间】:2014-07-19 17:17:51
【问题描述】:

我有一个返回浮点值的函数,如下所示:

1.31584870815277

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

例子:

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

对不起我的英语。

有人可以帮助我吗?谢谢

【问题讨论】:

  • 您希望如何舍入?显然,您的示例未遵循标准舍入规则,而是截断。你确定这是你想要的吗? (1.315 = 1.32 不是1.31

标签: delphi floating-point numbers compare decimal


【解决方案1】:

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

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

我的猜测是,您想要做的是使用四舍五入到最接近的小数位数。为此,您可以使用Math 单元中的SameValue 函数。在你的情况下,你会写:

SameValue(x, y, 0.01)

0.01 的容差范围内测试相等性。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多