Dim totinr As Double
totinr = 325.0 * 80.6
當我上面的代碼運行(編程方式使用即時窗口等)我得到輸出這樣26194.999999
但是手動或使用計算器來結果這樣整個值26195
。這是怎麼發生的?上述兩個數值乘法在.NET中如何執行計算?只有特定值倍增是在.NET不同,否則99%的乘法是正確VB.NET中的乘法錯誤?
Dim totinr As Double
totinr = 325.0 * 80.6
當我上面的代碼運行(編程方式使用即時窗口等)我得到輸出這樣26194.999999
但是手動或使用計算器來結果這樣整個值26195
。這是怎麼發生的?上述兩個數值乘法在.NET中如何執行計算?只有特定值倍增是在.NET不同,否則99%的乘法是正確VB.NET中的乘法錯誤?
一個你需要的編程學習最重要的東西 - 任何語言 - 是浮點運算是近似!
這不是一件「壞事」,它肯定不應該是一個「令人驚訝」的事情。
請閱讀此鏈接:
有趣的事實:在Mathematica中運行(支持任意精度)給出了值'26194.999999999996'。如果你在任何地方做到這一點,你會得到或多或少的相同的東西。 –
大答案在這裏:https://stackoverflow.com/a/618596/540339
它經過的準確性,何時使用浮動,雙精度或十進制。
有很多這樣的問題,但它們並不總是很容易找到。請參閱http://csharpindepth.com/Articles/General/FloatingPoint.aspx和http://csharpindepth.com/Articles/General/Decimal.aspx - 它們來自C#視角,但基礎是相同的。 –
['Double.Epsilon'](http://msdn.microsoft.com/en-us/library/system.double.epsilon.aspx) –
@UweKeim:這幾乎可以肯定*不是*有用的鏈接,說實話 - 尤其是絕對零解釋。 –