如何在Java中向上和向下舍入数字

时间:2016-03-03 23:48:03

标签: java

我试图让我的程序从左到右评估一个表达式,忽略操作顺序。

E.g。 5/3 + 2 * 3 = 12

分区应向上/向下舍入到最接近的整数。 在此示例中,5/3应等于2,因为5/3 = 1.666,最多为2。

我已经创建了一个函数来计算表达式,它完美地工作直到表达式涉及除法。它没有正确地舍入数字。 这就是我在代码中计算divion的方式:

            if (runningTotal % numbers.get(i + 1) >= 5) {
                runningTotal = (int) Math.ceil(runningTotal / numbers.get(i + 1));
            } else {
                runningTotal = (int) Math.floor(runningTotal / numbers.get(i + 1));
            }

runningTotal是一个int,numbers是一个包含整数的arraylist。我的演员有什么问题吗?

感谢您的帮助。

编辑=自己想出来。忘了所有关于Math.round()....

2 个答案:

答案 0 :(得分:4)

如果小数部分> = 5,则

Math.round()舍入到下一个更高的数字(双重形式),即7.5,7.6 ......将变为8.0。无论派系部分如何, Math.ceil()都会舍入到下一个更高的整数,即7.4将变为8.0。 Math.floor()与ceil()相反:无论小数部分如何,都会舍入到前一个整数,即7.8将变为7.0。 Math.rint()就像Math.round(),但它返回int形式的值。 所以你可能想这样做:

int r= Math.round(5.0/3.0)+2*3;
//or
int r=Math.rint(5.0/3.0)+2*3;
//rint() in preferable if 'r' is int

答案 1 :(得分:0)

你的问题是你正在进行整数除法,它只会产生整数。调用ceil或floor方法时,结果已被截断。尝试将整数注入浮点数。

Math.ceil((float)runningTotal / (float)numbers.get(i + 1))

相关问题