价值不必要地舍入

时间:2012-05-23 17:50:55

标签: php number-formatting

我有一些数据库数据,我正在做一些简单的数学运算。出于某种原因,我不能将总数从四舍五入到最接近的美元。不过,我还需要包含美分信息。我很肯定每个itemPrice条目在数据库中包含两个小数位。

if (strpos($row2["itemDiscount"],'%') !== false) {
    $itemDiscount = $row2["itemDiscount"];
    $itemDetailTotalUnformatted = $row2["itemQuantity"]*($itemPrice*(1-($itemDiscount/100)));
}
else {
    $itemDetailTotalUnformatted = $row2["itemQuantity"]*($row2["itemPrice"]-$row2["itemDiscount"]);
}
$itemDetailTotal = number_format($itemDetailTotalUnformatted, 2, '.', '');
echo $itemDetailTotal;

的var_dump($ ROW2):

50.00array(6) {
[0]=>
string(1) "2"
"itemQuantity"]=>
string(1) "2"
[1]=>
string(5) "30.00"
[itemPrice]=>
string(1) "30.00"
[2]=>
string(4) "5.00"
[itemPrice]=>
string(4) "5.00"

1 个答案:

答案 0 :(得分:3)

处理货币时,总是以整数运行。将价格保存在美分中,以美分处理价格,并且仅在结尾处除以100以显示结果。

这样做的原因是整数具有完美的精确度(达到极其高的值,而它们被作为浮点数处理),而浮点数则没有。 PHP中没有定点类型。

一旦你这样做,你的舍入问题可能会消失。