提问人:lky 提问时间:12/9/2022 最后编辑:John Kugelmanlky 更新时间:12/9/2022 访问量:47
为什么当值相同时,<小于条件命中?[复制]
Why is < less than condition hitting when values are the same? [duplicate]
问:
dump($available_funds);
dump($meal_price);
if ($available_funds < $meal_price) {
dd('hit');
return false;
}
$available_funds
并且两个“双精度”值都设置为 2.78$meal_price
为什么当值相同时,语句会被命中?if
我尝试了变量并尝试更新类型,看看这是否可以解决这种情况,但没有运气。(float)
floatval()
答:
2赞
Rijad Husic
12/9/2022
#1
该问题可能是由于 double 数据类型的精度所致。双精度值最多可以有 15 位十进制数字的精度,但在某些情况下,存储的实际值可能与声明的类型不同。这在比较双精度值时可能会导致问题,因为即使它们看起来相同,这些值也可能不完全相等。
此问题的一个解决方案是使用 round() 函数将值四舍五入到特定数量的小数位,然后再进行比较。例如,可以使用以下代码将这些值与精度的小数点后两位进行比较:
$available_funds = round($available_funds, 2);
$meal_price = round($meal_price, 2);
if ($available_funds < $meal_price) {
dd('hit');
return false;
}
评论
0赞
Andrew
12/10/2022
在 python 中查看: print(“%6.6f\n” % (2.77999999999999999804600747665972448885440826416015625)) ==> 2.780000;print(“%6.6f\n” % (2.7799999999999999804600747665972448885440826416015625 - 1/2**22.0)) ==> 2.780000;print(“%6.6f\n” % (2.7799999999999999804600747665972448885440826416015625 + 1/2**22.0)) ==> 2.780000
上一个:只需要点第一个值之后的浮点数 [duplicate]
下一个:浮点数学坏了吗?
评论
dump