PHPのround()に少し問題があります。私が本当にそれを正しくするかどうかはわかりません。(注文システムです)
$amountは10進数の14,8にすることができます$priceは10進数の10.5にすることができます(データベース内)
現在、次の丸めを使用しています。$priceは1つの$amountに対するものです。
function round_amount($amount) {
return (float) round($amount, 8);
}
function round_price($amount) {
return (float) round($amount, 5);
}
//if some one have more decimal chars like 10.000000009
round_amount(10.000000009); //will be 10.00000001
//if some one have more decimal chars like 10.000009
round_price(10.000009); //will be 10.00001
//also this is possible
round_price(round_amount(10.000000009)*round_price(10.000009))
この方法でラウンドを使用するのは正しいですか?一部のユーザーは16を超える小数点以下を使用しています。結果をユーザーデータベースに差し引いたり追加したりしています。
しかし、一部のユーザーは約5〜10セント多すぎます。
これを解決する唯一の方法は、小数点以下8桁と5桁のみを許可することですか?そして、ユーザーがもっと使用しようとした場合、ユーザーに警告しますか?しかし、round_cur(round_amount(10.000000009)* round_cur(10.000009))で問題が発生するよりも
私の丸め方が正しければ、誰かが私が何を意味しているのかを理解してくれるか、教えてくれることを願っています。
$amount = 10.12398413498579889173459873;
$price = 5.1938457198347695;
echo round_cur(round_amount($amount)*round_cur($price))."<br />";
echo round_cur($amount*$price);
//returns
//52.58245
//52.58241
面白い!