如果值为1.01到1,如果1.1然后在java中为2,如何舍入?

时间:2016-01-26 18:01:31

标签: java rounding

在java中

如何舍入具有以下模式的值(float,bigdecimal或double),

(1)如果值为1.0,即如果小数以零开始,那么这不应该四舍五入,值应该是整数。即,在这种情况下为“1”。

(2)如果值为1.1,即如果小数位数以大于0开头,则整数应舍入为下一个数字。即,如果是1.1那么它应该是2。

4 个答案:

答案 0 :(得分:6)

因此,您希望将低于0.1的任何内容舍入到0和0.1或更多到1.0

 long round = Math.round(x + 0.4);

答案 1 :(得分:1)

尝试启动(浮动和双重)

int rounded = Math.round(x + 0.4);

答案 2 :(得分:0)

https://docs.oracle.com/javase/8/docs/api/java/math/RoundingMode.html。我相信RoundingMode.CEILING就是你想要的。 BigDecimal可让您控制舍入:

new BigDecimal(1.0).setScale(0, RoundingMode.CEILING).doubleValue(); => 1.0
new BigDecimal(1.1).setScale(0, RoundingMode.CEILING).doubleValue(); => 2.0

Guava包含一些用于舍入浮点数的实用程序类,并直接使用RoundingMode进行双打。

DoubleMath.roundToInt(1.0, RoundingMode.CEILING); => 1
DoubleMath.roundToInt(1.1, RoundingMode.CEILING); => 2

编辑:哎呀。我错过了舍入1.01应导致1的部分。其他建议的方法更正确。

答案 3 :(得分:0)

我的说明书并不完全清楚。我理解你的问题是指" ceil"函数,即1.01必须向上舍入,但您的问题也可以解释为1.01必须向下舍入。 (如果后者是你想要的,请看Peter Lawrey的答案。)

对于double s(和float s),Java为ceil函数提供了标准方法Math.ceil(double a)

对于BigDecimal值,您可以使用setScale方法:将比例设置为0(无小数部分),将舍入模式设置为RoundingMode.CEILING以指定如何舍入:

static BigDecimal ceil(BigDecimal a) {
    return a.setScale(0, RoundingMode.CEILING);
}