我在C#中將Decimal轉換爲Double時遇到了問題。 而不是0.3我得到0.2999999999999Visual Studio 2010 C#Double
當我調試一點點時,我已經看到轉換不是問題。
查看打印屏幕和我的觀察列表? http://i.imgur.com/rTUDfxo.png
有沒有想法?
編輯: 答案:這是Visual Studio 2010的一些奇怪的行爲。 重新啓動後,一切都很好。
我在C#中將Decimal轉換爲Double時遇到了問題。 而不是0.3我得到0.2999999999999Visual Studio 2010 C#Double
當我調試一點點時,我已經看到轉換不是問題。
查看打印屏幕和我的觀察列表? http://i.imgur.com/rTUDfxo.png
有沒有想法?
編輯: 答案:這是Visual Studio 2010的一些奇怪的行爲。 重新啓動後,一切都很好。
0.3
當存儲二進制文件時有一個無限表示法:(0.) 00111111 11010011 00110011 00110011 00110011 00110011 00110011 00110011 .....
無論是用32,64還是128位存儲它,它都會在某個時刻切斷。
當將其轉換爲雙精度時,將失去精度。這就是爲什麼你得到0.2999999999 ...
這不是一個錯誤,它是簡單的不可能存儲無限精度。
這是Visual Studio 2010的一些奇怪的行爲。重新啓動後,一切都很好。 – 2013-05-10 09:00:43
請注意此標準:http://en.wikipedia.org/wiki/IEEE_floating_point IEEE-754 – 2013-05-10 09:12:28
該行爲常見於雙倍行爲,因爲它是floating binary type。 這兩種類型保存的值在存儲器中完全不同的,例如:
在浮子,所述計算機保存這樣
10001.10010110011
若干然而,在小數時,它存儲這樣
12345.65789
這可能會導致數字差別很小,例如:
在浮動:
0.1 = 0.09999
在十進制
0.l = 0.1
浮點值 – 2013-05-10 08:40:13
http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg。 html – 2013-05-10 08:42:02
事實上,這個問題無法回答。 0.2999999999999與0.3的Double值一樣有效。沒有語境,沒有人能告訴你爲什麼你觀察的這些價值觀是「錯誤的」。 – 2013-05-10 08:42:06