为什么math.ceiling没有将我的数字四舍五入? java的

问题描述 投票:0回答:3

试图编写这个脚本,使用经常达数千亿的输入。但是,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?

java ceil
3个回答
3
投票

clayneededint / long?如果你正在做int / long除法,它会在它到达Math.ceil之前截断任何小数分量。考虑到输入的大小,我会远离floats / doubles,并使用BigDecimals在这里准确地进行数学计算。


0
投票

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

所以你可以像这样计算它(如果整数除法的余数不是nul那么上限必须产生下一个整数):

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

-1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.