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