PHP整数和浮点数比较不匹配

我有以下代码

$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手册中的

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

:),但仍然是一个糟糕的选择。)

如果您需要花钱工作,请始终使用BC Math扩展。

要使用BC Math进行四舍五入,可以使用以下技术:

$x = '211.9452';

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

以上是 PHP整数和浮点数比较不匹配 的全部内容, 来源链接: utcz.com/qa/412303.html

回到顶部