获取java中的下一个更高的整数值

时间:2014-04-23 14:11:55

标签: java math numbers

我知道我可以使用Math.java函数来获取double或float的floor,ceil或round值,但我的问题是 - 如果小数点出现在我的位置,是否可以始终获得更高的整数值价值

例如

int chunkSize  = 91 / 8 ; 

等于11.375

如果我对这个数字应用floor,ceil或round,它将返回11我想要12。

简单如果我有11.xxx我需要12,如果我有50.xxx我想要51

抱歉,chunkSize应为int

我怎样才能做到这一点?

4 个答案:

答案 0 :(得分:15)

Math.ceil()将完成这项工作。

但是,您假设91 / 811.375是错误的。 在java中,整数除法返回除法的整数值(在您的情况下为11)。

为了获得浮点值,您需要将(或添加.0)转换为其中一个参数:

float chunkSize  = 91 / 8.0 ;
Math.ceil(chunkSize); // will return 12!

答案 1 :(得分:9)

ceil应该这样做。我引用:

  

返回最小(最接近负无穷大)双精度值   大于或等于参数且等于a   数学整数。

编辑:(感谢Peter Lawrey):再看看你的代码,你还有另外一个问题。你将整数除法的结果存储在一个浮点变量中:float chunkSize = 91 / 8 ; java查看除法的参数,因为它们都是整数,它执行整数除法,因此结果又是整数(分裂的结果向下舍入)。现在,即使你将它分配给float chunkSize,它仍然是一个整数(缺少双部分),ceil,round和floor都将返回相同的值。为避免这种情况,请向.0添加91float chunkSize = 91.0 / 8;。这使得其中一个参数具有双精度,因此将执行双重除法,返回双精度结果。

答案 2 :(得分:4)

如果你想进行整数除法,你可以做

x / y向上舍入,假设x和y为正

long div = (x + y - 1) / y;

在你的情况下

(91 + 8 - 1) / 8 = 100 / 8 = 12

这是有效的,因为您想要为除了精确倍数之外的每个值向上舍入(添加一个)(这就是您添加y - 1的原因)

答案 3 :(得分:1)

首先,当你写float chunkSize = 91 / 8 ;时,它会打印11.0而不是11.375

因为91和8都是int类型值。对于结果为十进制值,可以是除数或除数

或两者都必须是十进制值类型。因此,float chunkSize = 91.0 / 8;将导致11.375和

现在您可以应用Math.ceil()来获取更高的值。 Math.ceil(chunkSize);将导致12.0