金額を表す2つの数字を含むテキストファイルがあります。私がそれらをdoubleとして読んだとき、たとえば、double a = 73.7926 double b = 1.1
そしてそれらを一緒に追加すると、結果として得られます:74.892599999999987
私が持っていると期待する場所74.8926
これがなぜであり、四捨五入せずに期待される結果を得るには何をする必要があるのか、何か考えはありますか?
その特定のタスクでは、doubleの代わりにdecimal型を使用できます。
decimal a = 73.7926M;
decimal b = 1.1M;
decimal d = a + b;
表示されるはずです:IEEE浮動小数点エラーを理解するためのチュートリアル
すべてのプログラマーが浮動小数点演算について知っておくべきこと
それで、あなたはいくつかのばかげて単純なコードを書きました、例えば:
0.1 + 0.2
そして本当に予想外の結果を得ました:
0.30000000000000004
たぶん、あなたはいくつかのフォーラムで助けを求め、あなたの問題を助けていないように思われるたくさんの公式を含む長い記事を指摘されました。
さて、このサイトはここにあります:
- 予期しない結果が生じる理由を簡潔に説明してください
- この問題に対処する方法を教えてください
- 興味がある場合は、浮動小数点数がそのように機能する必要がある理由と、その他の問題が発生する可能性がある理由について詳細に説明してください。
最初に基本的な回答を確認する必要がありますが、それだけではありません。
お金を表現したい場合は、小数(基数10の浮動小数点)を使用する必要があります。
doubleの代わりにDecimalを使用します。なぜ、ここで読むことができます: http ://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/921a8ffc-9829-4145-bdc9-a96c1ec174a5
result = Math.Round(result, 4, MidpointRounding.AwayFromZero);