0

簡単な計算を行っているデータベースの数値がいくつかあります。なんらかの理由で、合計を最も近いドルに丸めないようにすることができません。ただし、セント情報も含める必要があります。各 itemPrice エントリには、データベース内の小数点以下 2 桁が含まれていることを確信しています。

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 は完全な精度 (代わりに float として処理される場合は、異常に高い値まで) を持っているのに対し、float はそうではないためです。PHP には固定小数点型はありません。

これを行うと、丸めの問題はおそらく解消されます。

于 2012-05-23T18:05:18.703 に答える