1

私はこれを使用しています

$grandtotal = round ($grandtotal, 2);

ショッピングカートから計算された総計をエコーするには、それがなければ次のようになります。

27.999999997 価格の小数のため。

質問、

浮動小数点の不正確さが常に 0.000000 領域のどこかにあると期待できますか?

常にこのような少数の丸めは問題ではなく、常に正しい合計権利を返す場合は?

それとも、より洗練されたアプローチが必要ですか?

私が取り組んでいる店舗は食品配達であり、0.00000002 の不正確さが 0.1 に累積されるように、人々が何千もの商品を注文することは期待されていません。

4

3 に答える 3

1

計算全体でラウンド関数を使用する場合は、問題はありません。

私はphpでいくつかの会計関連のものを書き、大きな問題なく関数を使用しました。
ただし、古き良き紙と鉛筆の計算と照らし合わせて結果を確認してください。:)

于 2012-10-18T11:23:16.760 に答える
1

ラウンドは使用しません

number_format($amount, 2, ".",""); //as you want the amount to be as much closer to real 27.99

しかし、本当にラウンドを使用する必要がある場合:

echo round(9.0, 0, PHP_ROUND_HALF_UP);   // 9
echo round(9.1, 0, PHP_ROUND_HALF_UP);   // 9
echo round(9.2, 0, PHP_ROUND_HALF_UP);   //9
echo round(9.3, 0, PHP_ROUND_HALF_UP);   // 9
echo round(9.4, 0, PHP_ROUND_HALF_UP);   // 9
echo round(9.5, 0, PHP_ROUND_HALF_UP);   // 10
echo round(9.6, 0, PHP_ROUND_HALF_UP);   // 10
echo round(9.7, 0, PHP_ROUND_HALF_UP);   // 10
echo round(9.8, 0, PHP_ROUND_HALF_UP);   // 10
echo round(9.9, 0, PHP_ROUND_HALF_UP);   // 10
echo round(27.999999997, 0, PHP_ROUND_HALF_UP); //28
echo round(27.994444, 0, PHP_ROUND_HALF_UP);   // 28

切り上げまたは切り捨てによって、多くのお金を失う可能性があります。バスケットには 10 個のアイテムがあり、1.4 ポンドの費用がかかります。10000 個のアイテムがある場合、失われたアイテムは 4 ペンスになり、失われたアイテムは 400 ポンドになります。

于 2012-10-18T11:36:12.230 に答える
1

適切ではないほどでroundはありませんが、データ型が適切ではありません。PHP の浮動小数点数は、質問にあるお金の値には適していません。したがって、ジョブに適したタイプを使用していません。

代わりに、専用の money タイプを使用してください。私の知る限り、デフォルトでは PHP には何も存在しません。たとえば、EAA カタログの P |など、さまざまな場所にそのパターンが記述されています。お金

于 2012-10-18T11:36:55.460 に答える