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

Wea*_*nds 5 java math numbers

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

例如

int chunkSize  = 91 / 8 ; 
Run Code Online (Sandbox Code Playgroud)

这将等于11.375

如果我将地板,天花板或圆形应用于此数字,它将返回11我想要12.

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

抱歉,chunkSize应为int

我怎样才能做到这一点?

Bob*_*der 15

Math.ceil() 会做的工作.

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

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

float chunkSize  = 91 / 8.0 ;
Math.ceil(chunkSize); // will return 12!
Run Code Online (Sandbox Code Playgroud)


izo*_*ica 9

ceil应该这样做.我引用:

返回大于或等于参数且等于数学整数的最小(最接近负无穷大)double值.

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

  • 如果您已经执行了整数除法,它将无济于事.`91/8 == 11`和`ceil(91/8)== 11.0` (2认同)

Pet*_*rey 5

如果您想进行整数除法舍入,可以执行

x / y 四舍五入,假设x和y为正

long div = (x + y - 1) / y;
Run Code Online (Sandbox Code Playgroud)

就你而言

(91 + 8 - 1) / 8 = 100 / 8 = 12
Run Code Online (Sandbox Code Playgroud)

之所以有效,是因为您想对除精确倍数(这就是为什么要添加y - 1)之外的每个值进行四舍五入(加一)