如果值为 1.01 到 1,如何四舍五入,如果 1.1 则 java 中的 2?

how to round off if the value is 1.01 to 1, if 1.1 then 2 in java?

在java

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

(1) 如果该值为 1.0,即如果小数点以零开头,则不应四舍五入,该值应为整数。即,在本例中为“1”。

(2) 如果值为 1.1,即小数点开始的数字大于 0,则整数应四舍五入到下一个数字。即,如果 1.1 那么它应该是 2.

因此,您想将低于 0.1 的值四舍五入为 0,将 0.1 或更大的值四舍五入为 1.0

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

开始尝试这个(对于 float 和 double)

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

参见 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 包含一些实用程序 类 用于舍入浮点数并直接使用 RoundingModes 加倍。

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

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

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

对于doubles(和floats)Java为ceil函数提供标准方法Math.ceil(double a)

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

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