2012-04-16 7 views
0

ここでは単純な解決策があるように感じますが、私はそれを見つけることができません。私は定数リテラル0.05を持っています。私のプログラムの実行中、私はdouble定数が0.05ではなく0.049999 ...などと扱われていることを発見しました。奇妙な、(double型の)リテラル値の予期しない変更

なぜこれが起こっているのですか?どうすれば防止できますか?

ご協力いただきありがとうございます。

-Matt

PS - 私は、新しいユーザー...ラットだので、私はより多くの情報を与えるためにスナップショットを投稿するだろうが、どうやら私はできません。

+0

どの言語ですか?そして、通常、「二重」は近似値であり正確な値ではありません。 – Nettogrof

+0

Visual Studio 2010でC#を実行しました。問題は実際に私が実行しているモジュロ演算であることがわかりました。 1.7%0.05は0よりも0.0499999999を返します。 – FreakinOutMan

+0

私はフロートとダブルをミックスしていると思います。私は浮動小数点演算の精度についてチェック/検索することをお勧めします。 – Nettogrof

答えて

1

0.05の2進表現はありません。1/20は2の累乗ではないため、浮動小数点(倍精度)表現はそれを近似します。一方、0.5は、正確に表すことができる。

vがあなたのリテラルの場合、(v == 0.05)は 'true'にする必要があります

+0

ああ - 今、感謝しています! – FreakinOutMan

関連する問題