【发布时间】:2011-06-13 06:27:30
【问题描述】:
给定以下行
BigDecimal step = 10.0G**-1.0G
groovy 1.7.5 返回错误
0.1000000000000000055511151231257827021181583404541015625
而 groovy 1.8 返回正确的
0.1
不幸的是,我想在 Grails 中解决我的问题。带有 groovy 的 1.4 1.8 还不够稳定(控制器不会在开发模式下刷新),而 grails 1.3.7 带有 groovy 1.7.x
两个问题:
是我做错了什么还是 1.7.5 中的错误?
如何避免这种行为?我认为 BigDecimals 在哪里最适合这种舍入问题?
第二次更新:(忘记第一次更新)-;
我现在有点困惑。似乎每次尝试都会得到不同的结果......:
BigDecimal step = 10.0G**-1.0G
println step
返回0.1000000000000000055511151231257827021181583404541015625
和
println 10.0G**-1.0G
返回
0.1
在两个 groovy 版本中。
但是,如果您只是将BigDec step = 10.0G**-1.0G 放在 groovyConsole 中并让控制台打印最后的响应,您会得到不同 groovy 版本的不同结果。所以一个问题似乎是 groovyConsole。
另一个问题似乎是执行的 toString 转换。
而且似乎涉及到一些自动装箱......当我做一个
def step = 10.0G**-1.0G
结果是一个 Double...
我想这可以将问题归结为两个问题:
- a) 哪些数学运算是 BigDecimal 运算?
和
- b) 如何轻松地对 BigDecimal 进行四舍五入,以便更正上述问题?
感谢您的耐心
【问题讨论】:
-
如果只是在 groovy 控制台中,还是有问题?
-
是的。主要问题是我的计算遇到了那些舍入问题。我虽然已经用上面的例子追踪了它。我会尝试再次追踪它。请继续关注... :-)
标签: groovy bigdecimal