我在试着做简单的数学运算。a=5,b=a/2 &(向上舍入),当我向上舍入时,它必须是5/2 = 3,c= b -a,3-5=2。我的问题是,当我除以5/2并向上舍入时,B得到2而不是3。有人能帮助我如何向上取整得到3吗?谢谢
int a=5;
int b=(int)Math.ceil(a/2);
int c=b-a;
System.out.println(b);
System.out.println(c);
发布于 2016-04-01 21:42:15
您应该在该行中使用2
的浮点值,而不是整数:
int b = (int) Math.ceil(a / 2f);//also you can use "2.0" or "2d" instead of "2f"
您的版本使用int
除法(生成2
的int
值)和2f
常量强制使用浮点除法并将a
值提升为float
(在除法后生成float
的2.5
值)
这要归功于Multiplicative Operators的JLS规范。
在操作数上执行
二进制数字升级(§5.6.2)
在我们的例子中,这就是numeric promotion对int
和float
除法操作数的工作方式:
加宽基元转换(§5.1.2)用于按照以下规则转换其中一个或两个操作数:如果其中一个操作数的类型为double,则另一个操作数转换为double。否则,如果其中一个操作数的类型为float,则另一个操作数将转换为float。
发布于 2016-04-01 21:49:13
你可以使用一个小技巧来让事情变得更快:
int b =(a + 1) / 2;
由于您除以2,以防数字与+ 1为奇数,因此您将获得精确的上舍入数值。如果数字与+1是偶数,则四舍五入将按预期给出其一半。
编辑
或者一般来说,如果你想计算Math.ceil(a / b)
,你可以用下面的公式:(a + b - 1) / b
,假设a和b是正的。
https://stackoverflow.com/questions/36357866
复制相似问题