我知道我可以使用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 / 8 是11.375错了.在java中,整数除法返回除法的整数值(在您的情况下为11).
为了获得浮点值,您需要将(或添加.0)转换为其中一个参数:
float chunkSize = 91 / 8.0 ;
Math.ceil(chunkSize); // will return 12!
Run Code Online (Sandbox Code Playgroud)
ceil应该这样做.我引用:
返回大于或等于参数且等于数学整数的最小(最接近负无穷大)double值.
编辑:(感谢彼得劳里):再看看你的代码,你有另一个问题.你将整数除法的结果存储在一个浮点变量中:float chunkSize = 91 / 8 ;java查看除法的参数,因为它们都是整数,它执行整数除法,因此结果又是一个整数(除法的结果向下舍入).现在,即使你将chunkSize它分配给浮点数,它仍然是一个整数(缺少双重部分)和ceil,round和floor都将返回相同的值.为了避免添加.0到91:float chunkSize = 91.0 / 8;.这使得其中一个参数具有双精度,因此将执行双重除法,返回双精度结果.
如果您想进行整数除法舍入,可以执行
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)之外的每个值进行四舍五入(加一)
| 归档时间: |
|
| 查看次数: |
20825 次 |
| 最近记录: |