gpt4 book ai didi

php整数和 float 比较不匹配

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:51:30 26 4
gpt4 key购买 nike

我有以下代码

$amount1 = 7299;
$amount2 = 72.9875;

$amount2_in_cents = round($amount2, 2) * 100;

if ($amount1 != $amount2_in_cents) {
echo "Amount $amount1 != $amount2_in_cents\n";

var_dump($amount1);
var_dump($amount2_in_cents);

} else {
echo "Amounts matched";
}

这是输出

Amount 7299 != 7299
int(7299)
float(7299)

现在我意识到 float 和 int 是不同的,但考虑到四舍五入,我希望这两个值匹配。我通过转换为 int 解决了这个问题。

所以我的问题是为什么这个比较没有像我预期的那样工作(两个值匹配)?

最佳答案

注意 PHP Manual 中的大红色警告 !

比较 float 时不要期望任何东西。 round 的结果,即使精度为 0,仍然是一个 float 。在您的特定情况下,结果碰巧比预期的要大一点,因此转换为 int 会导致相等,但对于其他数字,它也可能会比预期的小一点,并且转换为 int 不会四舍五入它,但截断它,所以你不能使用转换作为解决方法。 (请注意,比您的更好的解决方案是转换为字符串 :),但仍然是一个糟糕的选择。)

如果您需要处理大量金钱,请始终使用 BC Math extension .

对于 BC Math 的舍入,您可以使用此技术:

$x = '211.9452';
$x = bcadd($x, '0.005', 2);

祝你好运,
阿林

关于php整数和 float 比较不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5230305/

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