BigDecimal step = 10.0G**-1.0G
常規1.7.5返回錯誤
0.1000000000000000055511151231257827021181583404541015625
和Groovy 1.8返回正確的
0.1
不幸的是,我想在Grails中解決我的問題。 1.4使用Groovy 1.8不夠穩定,但(控制器未處於開發模式刷新)和Grails 1.3.7帶有常規1.7.x
兩個問題:
我做錯了什麼或這是1.7.5中的錯誤嗎?
我該如何避免這種行爲?我通過BigDecimals來完善這種舍入問題嗎?
第二更新:(忘記第一更新) - ;
我現在感到有點困惑。看來,我得到每次我試圖不同的結果....:
BigDecimal step = 10.0G**-1.0G
println step
回報0.1000000000000000055511151231257827021181583404541015625
和
println 10.0G**-1.0G
回報
0.1
兩個常規版本。
但是,如果您只需將BigDec step = 10.0G**-1.0G
放入groovyConsole並讓控制檯輸出最後一個響應,您將得到不同常規版本的不同結果。所以一個問題似乎是groovyConsole。
另一個問題似乎是執行的toString轉換。
而且似乎有些自動裝箱參與......當我做了
def step = 10.0G**-1.0G
結果是雙...
我想這下沸騰的問題兩個問題:
- a)哪些數學運算是BigDecimal運算?
和
- 二)我怎麼能輕鬆地圓一個BigDecimal,這樣我可以糾正上述問題?
感謝名單的耐心
如果只是在groovy控制檯,它仍然是一個問題? – RonK 2011-06-13 15:45:36
是的。主要問題是我的計算會遇到這些舍入問題。我雖然已經用上面的例子對它進行了跟蹤。我會嘗試再次追蹤它。請繼續關注... :-) – rdmueller 2011-06-13 17:19:49