5

控除後の税額を計算するための小さなスクリプトを書いています。私のアプリケーションには、CRUD 機能を提供するいくつかの PHP スクリプトがあります。毎月の経費、総請求収益を追加して、法人税の額を計算できます。

すべてのデータはデータベースに保存されますが、計算中に興味深い問題に遭遇しました。再現できるように、以下のコードを単純化します。

$total = 1.0;
$tax = 0.2;
$expenses = 0.05;

echo (($total-$tax) + $expenses); // this echo's 0.85
// (1.0 - 0.2) + 0.05 

if( (($total-$tax) + $expenses) == 0.85 ) {
    echo "totals add up";
}
else {
    echo "accounting error";
}

アイデアは、すべての合計がパーセンテージとして計算されるということです。1.0 は収益の 100% であり、問​​題の月の費用は 5% です (実際にはそうではありませんが、議論のために、私の実際の計算はもう少し複雑であるため)、どちらにしても、これが最も単純なようです。私は自分の計算を下に置くことができます。

したがって、100% (収益) - 20% (法人税) + 5% (経費請求) で、合計の 85% になります。最初の echo ステートメントで示されているように。

ただし、if ステートメントがつまずいて、「会計エラー」と表示されます。ここで何が起きてるの?

4

3 に答える 3

4

これは、浮動小数点計算でよくある問題です。簡単に言えば、一部の 10 進数は 2 進数では正確に記述できません。

一般的な解決策は、整数に固執し、すべてをセントで計算し、100 で除算を出力する場合にのみ行うことです。

于 2013-03-13T12:07:12.260 に答える
1

浮動小数点を比較するためのマニュアルをご覧ください: http://php.net/manual/en/language.types.float.php

于 2013-03-13T12:12:33.990 に答える
1

PHP のBCMath拡張機能を調査することをお勧めします。このサイトを検索し、質問を見つけることで参照を見つけましたここ.

于 2013-03-13T12:12:46.827 に答える