double sth = 250 - 249.99;
Console.WriteLine(sth);
なぜ代わりに0.01の0.009994507のように、このリターンsth
は、いますか?なぜこの値を二重に返すのですか? C#
double sth = 250 - 249.99;
Console.WriteLine(sth);
なぜ代わりに0.01の0.009994507のように、このリターンsth
は、いますか?なぜこの値を二重に返すのですか? C#
浮動小数点数(この場合は倍精度)は、10進値を正確に表すことはできません。詳細については、this page here
より正確な表現が必要な場合は、代わりにdecimal
を使用してください。
あなたの説明に感謝します! – johnatanasoff
ダブルを印刷すると、最初のx後の数字だけでなく、すべてのdouble値が出力されるためです。
String.Formatを使用すると、最初の2つの数字だけを印刷できます。
double sth = 250.00d - 249.99d;
string sthString = String.Format("{0:0.00}", sth);
Console.WriteLine(sthString);
無限の2進数表現を持つ小数があります。あなたが経験しているのはまさにこのケースです。 http://www.exploringbinary.com/why-0-point-1-does-not-exist-in-floating-point/
[すべてのコンピュータ科学者が知っておくべきことについて浮動小数点演算](https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg:このトピックを参照してくださいの詳細について
.html) – Plutonix