2
將小數轉換爲雙精度型時,有時會出現一些意外的截斷。 例如:將小數轉換爲雙精度型時出現意外截斷
decimal dec = -96.31614743511301m;
double dbl = Convert.ToDouble(dec); // dbl = -96.316147435113, why?
對於它按預期工作的其他值:
decimal dec2 = -96.269592225955307m;
double dbl2 = Convert.ToDouble(dec2); // dbl2 = -96.269592225955307, expected
注意其實際工作第二個例子中有更多的小數位數比沒有第一。此外,第一值可以成功地轉換成一個雙使用這種費解的代碼:
dbl = Convert.ToDouble(dec.ToString()); // dbl = -96.31614743511301, expected
那麼,爲什麼雙值在第一個例子截斷?
存儲細節不談,似乎如果兩個雙和十進制是能夠存儲值-96.31614743511301的,然後轉換,從一個到其他人應該沒有截斷價值。 爲什麼這個工作沒有截斷... double dbl = Convert.ToDouble(「 - 96.31614743511301」); 但這會導致截斷... decimal dec = -96.31614743511301m; double dbl = Convert.ToDouble(dec); –
這看起來像一個bug ... http://stackoverflow.com/questions/1584314/conversion-of-a-decimal-to-double-number-in-c-sharp-results-in-a-difference? RQ = 1 –