Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi-比较浮点值_Delphi_Floating Point_Numbers_Compare_Decimal - Fatal编程技术网

Delphi-比较浮点值

Delphi-比较浮点值,delphi,floating-point,numbers,compare,decimal,Delphi,Floating Point,Numbers,Compare,Decimal,我有一个函数,它返回如下的浮点值: 1.31584870815277 我需要一个函数,通过比较值和点后的两个数字来返回TRUE 例如: if 1.31584870815277 = 1.31 then ShowMessage('same'); 对不起我的英语 有人能帮我吗?谢谢您的问题说明有点模糊。例如,您声明要比较小数点后的值。在这种情况下,这意味着您希望1.31被视为等于2.31 在此之上,您需要指定要考虑多少小数位数。像1.31这样的数字不能用二进制浮点精确表示。根据您使用的类型,可以小

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

1.31584870815277
我需要一个函数,通过比较值和点后的两个数字来返回TRUE

例如:

if 1.31584870815277 = 1.31 then ShowMessage('same');
对不起我的英语


有人能帮我吗?谢谢

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

在此之上,您需要指定要考虑多少小数位数。像1.31这样的数字不能用二进制浮点精确表示。根据您使用的类型,可以小于或大于1.31

我猜您希望做的是使用四舍五入,精确到小数点后的特定数字。为此,您可以使用
数学
单元中的函数。在你的情况下,你会写:

SameValue(x, y, 0.01)
测试公差小于等于
0.01
的相等性


这可能不是你想要的,但从你的问题中可以清楚地看出,你还不知道你想要的是什么。如果您的需求与值的小数表示具体相关,那么考虑使用十进制类型而不是二进制类型。在Delphi中,如果速度不是最高优先级,则可以使用字符串转换:

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

你想怎么转?显然,您的示例不是遵循标准的舍入规则,而是截断规则。你确定这就是你想要的吗?(
1.315
=
1.32
不是
1.31