1

金額を表す2つの数字を含むテキストファイルがあります。私がそれらをdoubleとして読んだとき、たとえば、double a = 73.7926 double b = 1.1

そしてそれらを一緒に追加すると、結果として得られます:74.892599999999987 私が持っていると期待する場所74.8926

これがなぜであり、四捨五入せずに期待される結果を得るには何をする必要があるのか​​、何か考えはありますか?

4

4 に答える 4

6

その特定のタスクでは、doubleの代わりにdecimal型を使用できます。

decimal a = 73.7926M; 
decimal b = 1.1M;
decimal d = a + b;

表示されるはずです:IEEE浮動小数点エラーを理解するためのチュートリアル

于 2012-10-22T09:34:06.800 に答える
3

すべてのプログラマーが浮動小数点演算について知っておくべきこと

それで、あなたはいくつかのばかげて単純なコードを書きました、例えば:

0.1 + 0.2

そして本当に予想外の結果を得ました:

0.30000000000000004

たぶん、あなたはいくつかのフォーラムで助けを求め、あなたの問題を助けていないように思われるたくさんの公式を含む長い記事を指摘されました。

さて、このサイトはここにあります:

  • 予期しない結果が生じる理由を簡潔に説明してください
  • この問題に対処する方法を教えてください
  • 興味がある場合は、浮動小数点数がそのように機能する必要がある理由と、その他の問題が発生する可能性がある理由について詳細に説明してください。

最初に基本的な回答を確認する必要がありますが、それだけではありません。

お金を表現したい場合は、小数(基数10の浮動小数点)を使用する必要があります。

于 2012-10-22T09:33:46.893 に答える
0

doubleの代わりにDecimalを使用します。なぜ、ここで読むことができます: http ://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/921a8ffc-9829-4145-bdc9-a96c1ec174a5

于 2012-10-22T09:33:56.990 に答える
0
result = Math.Round(result, 4, MidpointRounding.AwayFromZero);
于 2014-12-10T11:42:09.177 に答える