Fab*_*oli 1 java floating-point grails groovy
我发生在grails项目中的这个奇怪的除法错误中(但我认为grails与它没什么关系,我认为是一个常规或java问题):
如果在groovy控制台中我运行它
float money = -1.30
float r = 0.01
println ((money/r).class.name)
println ((money/r).floatValue())
println ((money/r).toString() )
Run Code Online (Sandbox Code Playgroud)
我得到了这个输出
java.lang.Double
-130.0
-129.99999813735482
Run Code Online (Sandbox Code Playgroud)
groovy中的float分区给了我一个Double,这是正确的,但为什么Double toString()给我一个如此奇怪的值"-129.99999813735482"而不是正确的"-130.0"?
正如每个人所说,对于您想要做的事情来说不够精确double
。float
一种解决方案是不用作float
对象类型,并执行以下操作:
def money = -1.30
def r = 0.01
println ((money/r).class.name)
println ((money/r).floatValue())
println ((money/r).toString() )
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,Groovy 使用BigDecimal
,这意味着输出是:
java.math.BigDecimal
-130.0
-130
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
864 次 |
最近记录: |