鉴于浮点不精确并且我应该使用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
答案 0 :(得分:5)
您应永远使用货币的浮点值。它们不准确。相反,以最小单位(美分,便士等)存储货币值,以便您可以使用整数。在这种情况下,没有理由使用bcmath库,除非你处理的是非常不可能的巨大值。