2011-12-13 70 views
0
Dim totinr As Double 
totinr = 325.0 * 80.6 

當我上面的代碼運行(編程方式使用即時窗口等)我得到輸出這樣26194.999999但是手動或使用計算器來結果這樣整個值26195。這是怎麼發生的?上述兩個數值乘法在.NET中如何執行計算?只有特定值倍增是在.NET不同,否則99%的乘法是正確VB.NET中的乘法錯誤?

+3

有很多這樣的問題,但它們並不總是很容易找到。請參閱http://csharpindepth.com/Articles/General/FloatingPoint.aspx和http://csharpindepth.com/Articles/General/Decimal.aspx - 它們來自C#視角,但基礎是相同的。 –

+0

['Double.Epsilon'](http://msdn.microsoft.com/en-us/library/system.double.epsilon.aspx) –

+1

@UweKeim:這幾乎可以肯定*不是*有用的鏈接,說實話 - 尤其是絕對零解釋。 –

回答

1

一個你需要的編程學習最重要的東西 - 任何語言 - 是浮點運算是近似

這不是一件「壞事」,它肯定不應該是一個「令人驚訝」的事情。

請閱讀此鏈接:

+0

有趣的事實:在Mathematica中運行(支持任意精度)給出了值'26194.999999999996'。如果你在任何地方做到這一點,你會得到或多或少的相同的東西。 –