0

我有一些数据库数据,我正在做一些简单的数学运算。出于某种原因,我无法将总数四舍五入到最接近的美元。不过,我还需要包含美分信息。我很肯定每个 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"
4

1 回答 1

3

在处理货币时,总是以整数工作。以美分保存价格,以美分处理价格,只有在最后除以 100 以呈现结果。

这样做的原因是 int 具有完美的精度(直到非常高的值,它们被作为浮点数处理),而浮点数没有。PHP 中没有定点类型。

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

于 2012-05-23T18:05:18.703 回答