税率対応で誤差が出ます。
PHPバージョンは「PHP 5.3.18」です。
例えば、価格=1000で税率10%の場合、下記処理だと「1101」となってしまいます。
まるめ誤差の影響でしょうか??対策などありますでしょうか?
// 税率 $taxRate=0.080; //$taxRate=0.100; // 端数区分 $taxHasu="1"; //$taxHasu="2"; //$taxHasu="3"; // 価格 $price=1000; // 計算誤差を考慮 $calctaxRate = (1 + $taxRate) * 100; /******** 税抜処理 **************************/ // 切捨て if ( $taxHasu == "1" ) { $outPrice=ceil( ($price/$calctaxRate) * 100); // 四捨五入 } else if ( $taxHasu == "2" ) { $outPrice=round( ($price/$calctaxRate) * 100); // 切上げ } else if ( $taxHasu == "3" ) { $outPrice=floor( ($price/$calctaxRate) * 100); } /******** 税込処理 **************************/ // 切捨て if ( $taxHasu == "1" ) { $inPrice=floor(($price*$calctaxRate)/100); // 四捨五入 } else if ( $taxHasu == "2" ) { $inPrice=round(($price*$calctaxRate)/100); // 切上げ } else { $inPrice=ceil(($price*$calctaxRate)/100); }
そのまま動作させて動くコードで質問してください。
コピペで現象再現するコードをご提示ください。
また、PHPのバージョンも質問本文に追記してください
1100が出力されます。
失礼しました。ご指摘部分を追記しました。
910と1100になります。
質問者さんのところでは後者が1101と表示されるということでしょうか?
echo $outPrice . PHP_EOL;
echo $inPrice . PHP_EOL;
910
1100
$ php -v
PHP 7.2.19-0ubuntu0.18.04.2 (cli) (built: Aug 12 2019 19:34:28) ( NTS )
ご確認ありがとうございます。その通りです。
$calctaxRate に直接 110 を代入して計算するとどうなりますか?
明示的に切り捨てるならflor()、切り上げるならceil()ってのがあるけどね。浮動小数点を使う以上誤差は出ちゃうから、都度検算して修正する気配りをコーディングするしかない気もする。消費税の計算って、四捨五入なんてことはせず、全てにおいて切り捨て、あるいは全てにおいて切り上げ、っていうのが店舗や事業単位のルールだった気がするけど、違うか?
確かにその通りですね。統一されているはずです。
都度潰していくしかなさそうですね。。