在java中
如何舍入具有以下模式的值(float,bigdecimal或double),
(1)如果值为1.0,即如果小数以零开始,那么这不应该四舍五入,值应该是整数。即,在这种情况下为“1”。
(2)如果值为1.1,即如果小数位数以大于0开头,则整数应舍入为下一个数字。即,如果是1.1那么它应该是2。
答案 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);
}