为什么math.ceiling不四舍五入?爪哇

时间:2019-03-22 14:30:44

标签: java ceil

尝试编写此脚本,使其能够处理通常高达数千亿美元的输入。但是,Math.ceil不会向上舍入吗?

int clayturns  = (int)Math.ceil(clayneeded / 7500000000L);
System.out.println((int) Math.ceil(clayneeded / 7500000000L));
System.out.println("we need " + clayturns + "turns");
System.out.println("we need " + clayneeded + " clay added to our specific village.");

在这里,我有eclipse控制台的输出。如您所见,clayneeded不是空白​​。好像是这种情况,那么clayturns总是应该是某种东西,不能为零,而是。

we need 0turns
we need 3021588634 clay needed to our specific village.

请让我知道您的想法。数学单元格不适用于Longs吗?

3 个答案:

答案 0 :(得分:3)

clayneededint / long吗?如果您要进行int / long除法,它将在到达Math.ceil之前截断任何小数部分。给定您输入的大小,我将远离float / double s,并在这里使用BigDecimal s精确地进行数学计算。

答案 1 :(得分:0)

看起来clayneeded具有整数类型(可能是long)。因此clayneeded/7500000000L整数除法(商),因此ceil计算整数的上限,即整数本身。

因此您可以这样计算(如果整数除法的余数不是nul,则上限必须产生下一个整数):

long remainder = clayneeded % 7500000000L;
long result = (clayneeded/7500000000L)+(remainder!=0?1:0);

答案 2 :(得分:-1)

这是因为您将clayturns变量存储在整数内。发生Integer溢出,返回0。

整数的最大值为+2,147,483,647。