如何在Groovy中舍入一个数字?

时间:2010-12-30 06:35:33

标签: groovy

如何在Groovy中舍入一个数字?我想保留2位小数。

例如(伪代码):

round(1.2334695) = 1.23
round(1.2686589) = 1.27

12 个答案:

答案 0 :(得分:32)

您可以使用:

Math.round(x * 100) / 100

如果xBigDecimal(Groovy中的default),那么这将是准确的。

答案 1 :(得分:25)

如果您处理Double或浮动的

你可以简单地使用

assert xyz == 1.789
xyz.round(1) == 1.8
xyz.round(2) == 1.79

答案 2 :(得分:18)

使用mixin。

class Rounding {
    public BigDecimal round(int n) {
        return setScale(n, BigDecimal.ROUND_HALF_UP);
    }
}

将此添加到您的启动类中,round()是BigDecimal的第一类方法:

BigDecimal.mixin Rounding

测试用例:

assert (new BigDecimal("1.27")) == (new BigDecimal("1.2686589").round(2))
assert (1.2686589).round(2) == 1.27
assert (1.2334695).round(2) == 1.23

答案 3 :(得分:12)

像这样:

def f = 1.2334695;
println new DecimalFormat("#.##").format(f);

或者像这样:

println f.round (new MathContext(3));

输出:

  

1.23

参考:Formatting a Decimal Number

答案 4 :(得分:9)

Groovy为round()Double类添加了Float方法,因此:

(123.456789f).round(2) == 123.46f

来源:Rounding Numbers in Groovy

答案 5 :(得分:5)

可能更多 Groovysh 方式是使用此代码段(x as double).round(2),如下所示:

def a = 5.2355434
println "a = $a, a.class = ${a.getClass()}"

def b = (a as double).round(2)
println "b = $b, b.class = ${b.getClass()}"

答案 6 :(得分:2)

从@ sjtai的优秀答案开始,这是我用于几乎所有十进制舍入需求的Mixin:

class Rounding {
    public BigDecimal round(int decimalPlaces = 0, RoundingMode roundingMode = RoundingMode.HALF_EVEN) {
        return setScale(decimalPlaces, roundingMode);
    }
}

如果默认情况下舍入到int并使用“偶数”舍入方法(默认情况下减少统计错误总是一件好事),但它仍然允许调用者轻松覆盖这些。

答案 7 :(得分:1)

就这么简单:

wxUSE_GRAPHICS_GDIPLUS

注意:这会切断多余的小数点;它没有结束。

答案 8 :(得分:1)

如果你只是定义一个这样的方法,那么看看@ sjtai和@ cdeszaq的答案,你不需要混淆mixin:

def bigDecimalRound(n,decimals){
    return(n.setScale(decimals, BigDecimal.ROUND_HALF_UP))
}

BigDecimal内置方法setScale执行舍入。

println(1.2334695.setScale(2, BigDecimal.ROUND_HALF_UP))
>> 1.23

值得注意的是,setScale接受否定论证,以便将事物变为更大的数量级,即

println(123.2334695.setScale(-1, BigDecimal.ROUND_HALF_UP))
>> 1.2E+2

答案 9 :(得分:1)

例如:

def rd = 1.3425345352
sd = ((float)rd).round(3)

println sd  

>> 1.343

答案 10 :(得分:0)

您可以将任何数字转换为 float ,然后将round()函数用作: ((float)1.2334695).round(2)

答案 11 :(得分:0)

这对于 Groovy 来说非常复杂。它通常......更时髦。

您需要创建一个 MathContext 对象来进行舍入。

num =  9.59123331333g
// rounds to 2 places, rounding up by default
mc = new java.math.MathContext(2)
num.round(mc)

==> Result: 7.0

得到帮助