私は二重の"138630.78380386264"
を持っていますが、小数点に変換したいのですが、キャストするか、Convert.ToDecimal()
を使用して精度を失います。C#二倍から十進精度の損失
何が起こっているのですか?小数とダブルの両方がこの番号を保持することができます:
またdouble doub = double.Parse("138630.78380386264");
decimal dec = decimal.Parse("138630.78380386264");
string decs = dec.ToString("F17");
string doubse =DoubleConverter.ToExactString(doub);
string doubs = doub.ToString("F17");
decimal decC = (decimal) doub;
string doudeccs = decC.ToString("F17");
decimal decConv = Convert.ToDecimal(doub);
string doudecs = decConv.ToString("F17");
:どのように私は、二重のToString()
は、デバッガが示すように、同じ結果をプリントアウトして入手できますか?例えば138630.78380386264
?
[C#の10進数から2倍数への変換では差が生じる](http://stackoverflow.com/questions/1584314/conversion-of-a-decimal-to-double-number-in- c-results-in-a-difference) –
Well Convert.ToDecimal(somedouble)はsomedouble(10進)と正確に等しいので、そこに驚きはありません。なぜ私はそのキャストが最後の数字を下に丸めるのか分からない。 – harold
@haroldあなたはだまされました。それは最も近いものに丸めます。 double値は386264で終了し、15小文字の小数点は3863で終わります。 –