我,雖然我明白浮點但有人可以解釋以下
float f = 1.85847987E+9F;
double d = Convert.ToDouble(f);
d現在轉換成字符串爲1858479872.0
。我假設額外2是因爲double不能完全表示浮點數。
我的問題是爲什麼它似乎能夠rerepsent相同號碼時直接分配
double d = 1.85847987E+9;
,它正好顯示爲185847987.0
我,雖然我明白浮點但有人可以解釋以下
float f = 1.85847987E+9F;
double d = Convert.ToDouble(f);
d現在轉換成字符串爲1858479872.0
。我假設額外2是因爲double不能完全表示浮點數。
我的問題是爲什麼它似乎能夠rerepsent相同號碼時直接分配
double d = 1.85847987E+9;
,它正好顯示爲185847987.0
問題不是雙重的,而是浮動的。浮點數限制爲32位,而雙精度使用64位。
因爲浮標存在於符號,尾數和指數之外。請參閱Jon Skeet's answer here如何提取這些值。對於1.85847987E+9F
,尾數爲7259687
,指數爲8
。然後mantissa << exponent
等於1858479872
。由於float的精度爲limited to 7 digits,超過7位的任何數字的值取決於實現,而不是輸入。您可以通過輸入123456789F
來輕鬆測試。
如果我有一個float開始,那麼什麼是轉換爲字符串'code'Convert.ToDouble(1.85847987E + 9F).ToString()或1.85847987E + 9F.ToString() – user2000579
或者因爲單精度浮點數不能表示值。看看[這裏](http://msdn.microsoft.com/en-us/library/b1e65aza(v = VS.100).aspx)。 – HABO
這裏有很多關於這個的文章 - 有一個翻身。 – James
Float可以存儲7位有效數字,你有9位。轉換爲double不能奇蹟般地恢復丟失的內容。 –