2016-12-23 12 views
-6
double a=60.5; 
double a=60.1; 

Console.WriteLine(a-b); 

戻り値は0.399999999999999ない0.4なぜ60.5 - 60.1が0.399999999999999ですか? C#では、二重変数

+5

浮動小数点の不正確さにつきまして、800万円のその他の質問があなたの好奇心を満たさない理由がありますか? :-) – paxdiablo

+3

@paxdiablo:実際には7499999の他の質問があったと思いますが、これは欠けているものでした... – Mehrdad

+0

このリンクをご覧ください:http://stackoverflow.com/questions/21895756/why-are -floating-point-numbers-부정확な – Prabu

答えて

3

であるあなたは、二重使用しているためそれはです:ダブルは正確ではない点に、浮いています。一方、小数は正確です。両方の変数を10進数に変更すると、正確な数値になります。

これは、特定の分野では、金融業界のように、精度と正確さのために小数が望ましい理由です。

+4

これは正確ではありません。 'Decimal'も浮動小数点です。大きな違いは、 'float'は基底2であるため、基数10を近似することができるだけで、' Decimal'は単純近似による誤差を除去する基底10です。正確ではない場合、精度エラーの影響を受け易い。 –

+0

倍精度*は精度が高いという点で*正確です。彼らが*持っていないものは、無限の精度です。無限の精度を持たないものはDecimalsです:-) '√2'、'π'、 'e'、または' 1/3 'のようなすべてのケースを扱うことはできません。すべてDecimal型の精度損失を引き起こします。 http://stackoverflow.com/questions/8270789/what-is-the-difference-between-precision-and-accuracy/8270869#8270869も参照してください。 – paxdiablo

関連する問題