计算购物车总数时bcadd真的有必要吗?

时间:2011-04-19 22:29:29

标签: php

鉴于浮点不精确并且我应该使用BCMath函数来获得精确的结果,是否真的有必要在PHP中使用价格字符串并在制作“简单”购物车时使用bcadd添加它们?

鉴于以下示例,为什么我不应该使用圆形浮点数?

我正在寻找计算购物车订单总额的最佳做法。

    $floatTotal = 0.00;
$stringTotal = '0.00';

for($i=0; $i<1000; $i++) {
    $floatTotal += 0.1; 
}
echo "float value: ";
printf('%.40f', $floatTotal); //99.9999999999985931253831950016319751739502

echo "<br>\n";

echo "rounded float value: ". round($floatTotal); //100

echo "<br>\n";

for($i=0; $i<1000; $i++) {
    $stringTotal = bcadd($stringTotal, '0.1', 2);
}

echo 'string value: '.$stringTotal.'<br>'; //100.00

1 个答案:

答案 0 :(得分:5)

您应永远使用货币的浮点值。它们不准确。相反,以最小单位(美分,便士等)存储货币值,以便您可以使用整数。在这种情况下,没有理由使用bcmath库,除非你处理的是非常不可能的巨大值。