尝试编写此脚本,使其能够处理通常高达数千亿美元的输入。但是,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吗?
答案 0 :(得分:3)
clayneeded
是int
/ 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。