PHPコードの構成変数に保存される価格と割引額がいくつかあります。それらを文字列として保存する必要があるかどうか疑問に思っています。
たとえば、次のことを行っても安全ですか?
$price = 14.95;
$volume_discount = 0.3;
または文字列として保存する必要がありますか?
$price = '14.95';
$volume_discount = '0.3';
BC Math を使用しない限り、浮動小数点数を比較したり、浮動小数点数を使用して計算を行ったりすると、予期しない結果が生じる可能性があることはわかっています。しかし、保存された値をそのまま印刷することについて疑問に思っています。フロートバージョンをエコーしてみましたが、期待どおりに表示されましたが、それが信頼できるかどうか疑問に思っています。
注: 私は、素人が何を期待するかを説明するために、期待されるという用語を使用しました。Eric が指摘するように、正確な 10 進浮動小数点数は実際には期待される結果ではありません。
編集: 現時点で関心のあるコードは、数量をチェックし、割引を適用するかどうかを決定します。次に、次の計算を行います。
$price -= round($price * $volume_discount, 2);
私は通常number_format
、表示用に価格をフォーマットするために使用しますが、テスト用にフォーマットをコメントアウトしました。これまでのところ、価格や割引の値に関係なく、PHP は望ましい結果をもたらしてくれました。ただし、JavaScript を使用しても必ずしも望ましい結果が得られるとは限りません。それが、私の PHP コードをもう一度見直すきっかけになりました。
明らかに、エラーが表示される JavaScript を調整しますが、PHP コードをリファクタリングする必要があるかどうかを判断しようとしていました。
問題を説明した数字は 149.95 * 0.3 でした。PHP は 44.985 を表示し、JavaScript は 44.98499999999999 を表示します。そのため、小数点以下 2 桁に丸めた後でも、異なる数値が得られます。