gpt4 book ai didi

php - 不知何故 1 不等于 1 (PHP)

转载 作者:可可西里 更新时间:2023-11-01 14:03:09 25 4
gpt4 key购买 nike

我有一个关联数组,其值是 float ,应该是概率。因此,我将它们相加并要求结果实际上是 1。

$total = array_sum($array);
echo '$total = '.$total."\n";
if ($total == 1) {
die("total is 1");
} else {
die("total is not 1");
}

这神秘地输出:

$total = 1
total is not 1

执行 var_dump($total) 会产生 float(1),但即使 $total == (float)1 也会返回 false .

这是怎么回事?

最佳答案

浮点值本质上是不精确的,并且由于它们的存储方式和舍入误差而很少彼此相等。您应该通过查看这两个值是否“足够接近”来比较 float 。即,将两个值之差的绝对值与明显很小的误差范围(通常称为“epsilon”)进行比较。

一个这样的实现可能是:

if (abs($total - 1) < 0.000000001)
die("total is 1");
} else {
die("total is not 1");
}

请注意,只有您的应用程序要求才能真正确定安全误差范围是多少,以及在什么点上应该四舍五入以显示数字。


例如,如果您正在处理货币值,并且需要精确度,更好的解决方案是完全放弃浮点运算。在这种情况下,一个选择是使用整数类型并将数字存储为美分,仅在最后一分钟进行除法以向用户显示数字(或者甚至不除法,而是在字符串中注入(inject)小数点)。

关于php - 不知何故 1 不等于 1 (PHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18663169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com