2015-10-05 31 views

回答

1

這是因爲double精度有限,而decimal存儲十進制數字。在這裏閱讀更多:Difference between decimal, float and double in .NET?

基本上decimal是在存儲數量十進制表示更好。

編輯:在回答你原來的問題更加明確:無論你的結果是有點不正確因爲-36.845167不能表示爲double。看看這個表達式的輸出:

result.ToString("G20") 

雙方你的結果,你會看到他們兩人不等於-36.845167:其中之一是-36.845166999999996等是- 36.845167000000004

因此,他們都是4e-15關閉您的原始號碼。在調試器中(或輸出到控制檯)真正看到的只是在轉換爲字符串期間的四捨五入。

+0

但是,爲什麼可以通過使用double的TryParse方法直接創建double而不是直接創建正確的double? – zcj

+0

我會更新答案 – torvin

2

兩個雙打包圍-36.845167是-36.84516700000000355430529452860355377197265625和-36.84516699999999644887793692760169506072998046875

它們從精確值通過3.55112206307239830493927001953125E-15和 分別3.55430529452860355377197265625E-15不同。

第一個比較接近,所以它是正確的IEEE 754最接近的結果。我不知道該標準要求將C#十進制轉換爲double的標準,但是,假定在這兩種情況下使用了相同的輸出方法,它可能沒有做到圓整到最近。

相關問題