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

Geo*_*zen 34 groovy

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

例如(伪代码):

round(1.2334695) = 1.23
round(1.2686589) = 1.27
Run Code Online (Sandbox Code Playgroud)

Mat*_*hen 34

您可以使用:

Math.round(x * 100) / 100
Run Code Online (Sandbox Code Playgroud)

如果xBigDecimal(Groovy中的默认值),这将是准确的.

  • 确保将变量分配给该表达式的结果-例如:x = Math.round(x * 100)/ 100 (2认同)

joh*_*ith 29

如果你处理Double或浮动的

你可以简单地使用

assert xyz == 1.789
xyz.round(1) == 1.8
xyz.round(2) == 1.79
Run Code Online (Sandbox Code Playgroud)


sjt*_*tai 18

使用mixin.

class Rounding {
    public BigDecimal round(int n) {
        return setScale(n, BigDecimal.ROUND_HALF_UP);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

BigDecimal.mixin Rounding
Run Code Online (Sandbox Code Playgroud)

测试用例:

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
Run Code Online (Sandbox Code Playgroud)


Sea*_*oyd 12

像这样:

def f = 1.2334695;
println new DecimalFormat("#.##").format(f);
Run Code Online (Sandbox Code Playgroud)

或者像这样:

println f.round (new MathContext(3));
Run Code Online (Sandbox Code Playgroud)

输出:

1.23

参考:格式化十进制数


10G*_*per 10

Groovy round()DoubleFloat类添加了一个方法,因此:

(123.456789f).round(2) == 123.46f
Run Code Online (Sandbox Code Playgroud)

来源:Groovy中的舍入数字


los*_*jos 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()}"
Run Code Online (Sandbox Code Playgroud)