我知道我可以使用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
我怎样才能做到这一点?
答案 0 :(得分:15)
Math.ceil()
将完成这项工作。
但是,您假设91 / 8
为11.375
是错误的。
在java中,整数除法返回除法的整数值(在您的情况下为11)。
为了获得浮点值,您需要将(或添加.0)转换为其中一个参数:
float chunkSize = 91 / 8.0 ;
Math.ceil(chunkSize); // will return 12!
答案 1 :(得分:9)
ceil应该这样做。我引用:
编辑:(感谢Peter Lawrey):再看看你的代码,你还有另外一个问题。你将整数除法的结果存储在一个浮点变量中:返回最小(最接近负无穷大)双精度值 大于或等于参数且等于a 数学整数。
float chunkSize = 91 / 8 ;
java查看除法的参数,因为它们都是整数,它执行整数除法,因此结果又是整数(分裂的结果向下舍入)。现在,即使你将它分配给float chunkSize
,它仍然是一个整数(缺少双部分),ceil,round和floor都将返回相同的值。为避免这种情况,请向.0
添加91
:float 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