0
我覺得這裏有一個簡單的解決方案,但我似乎無法找到它。我有一個常量0.05。在執行我的程序的過程中,我發現雙常數不是0.05,而是0.049999等。奇怪的,在文字值(雙重類型)意外的變化
爲什麼會發生這種情況,我該如何預防它?
在此先感謝您的幫助!
-Matt
PS - 我會發佈一個快照,以提供更多的信息,但顯然我可以,因爲我不是一個新的用戶...大鼠。
我覺得這裏有一個簡單的解決方案,但我似乎無法找到它。我有一個常量0.05。在執行我的程序的過程中,我發現雙常數不是0.05,而是0.049999等。奇怪的,在文字值(雙重類型)意外的變化
爲什麼會發生這種情況,我該如何預防它?
在此先感謝您的幫助!
-Matt
PS - 我會發佈一個快照,以提供更多的信息,但顯然我可以,因爲我不是一個新的用戶...大鼠。
沒有0.05的二進制表示,因爲1/20不是二的冪,所以浮點(雙精度)表示只能近似於它。另一方面,0.5可以精確地表示。
如果v是你的文字,那麼(v == 0.05)應該是'true'
啊 - 我現在明白了,謝謝! – FreakinOutMan 2012-04-17 05:51:52
哪種語言?通常一個「雙」是一個近似值,而不是一個確切的值。 – Nettogrof 2012-04-16 20:39:30
Visual Studio 2010中的C#我發現問題實際上是我正在執行的模操作。 1.7%0.05回報0.0499999999 ...而不是0. – FreakinOutMan 2012-04-16 23:27:37
哎呀我認爲我混合了浮動和雙。我建議檢查/搜索浮點運算精度。 – Nettogrof 2012-04-17 02:03:16