如何在groovy中使用Math.round进行大小数?

如何在groovy中使用Math.round进行大小数?,groovy,Groovy,我的groovy脚本中有一个收集成本值的变量。但是,该值为91.77766667,我希望将其向上舍入,以便显示为91.8。如何更改下面的代码以实现此目的,我正在努力实现Math.round功能: def testcost = jsongroups.xxx.cost.flatten().collect { new Math.round(BigDecimal (it)) } log.info testcost Groovy语言有一个round()方法,该方法将十进制数四舍五入到特定的小数位作为参

我的groovy脚本中有一个收集成本值的变量。但是,该值为91.77766667,我希望将其向上舍入,以便显示为91.8。如何更改下面的代码以实现此目的,我正在努力实现Math.round功能:

def testcost = jsongroups.xxx.cost.flatten().collect { new Math.round(BigDecimal (it)) }

log.info testcost

Groovy语言有一个
round()
方法,该方法将十进制数四舍五入到特定的小数位作为参数

def decimalValue = (Double)91.7776766667
println "Value upto two decimal places >>"+decimalValue.round(2)
输出:

Value upto two decimal places >>91.78
您可以直接对数字使用BigDecimal.setScale(scale,roundingMode),而不是Math.round()

def testcost = jsongroups.options.cost.flatten().collect { new BigDecimal (it).setScale(1, RoundingMode.HALF_UP)}
log.info testcost

上半部分将从0.01-.04四舍五入到0.0,从0.05-.09四舍五入到0.1。阅读RoundingMode的JavaDoc以了解其他舍入可能性,如半舍五入等。

您使用的是哪一版本的Java和Groovy?原因2.4.11 JVM:1.8.0131我得到groovy.lang.MissingMethodException:没有方法签名:java.math.BigDecimal.round()适用于参数类型:(java.lang.Integer)值:[2]从您的代码嘿,您要对整数进行四舍五入,首先,将其转换为
双精度
,然后尝试
round()
。我更改了上面的答案,请查看。有关更多详细信息,请参阅不是一个好的解决方案:问题是,如果您有一个大的十进制数,并将其转换为双精度,那么在四舍五入后,您可能会失去足够的精度,从而得到错误的答案。四舍五入一个BigDecimal开始时,您可以精确控制四舍五入的方式,在某些情况下,如果您使用新的BigDecimal(“0.145”)。doubleValue()。四舍五入(2)您将得到0.14,而不是使用半舍五入时得到的结果。这是因为groovy to round将双精度0.145转换为0.14499999999。。。然后将不精确的四舍五入设置为0.14。