数学简单的例子

时间:2016-04-01 13:40:40

标签: java math floating-point jls

我正在尝试做简单的数学运算。 a = 5,b = a / 2&(向上舍入),当我向上舍入时,它必须是5/2 = 3,c = b-a,3-5 = 2。我的问题,当我划分5/2并向上舍入时,我得到2而不是3为b。有人可以帮助我如何围捕并获得3分吗?感谢

int a=5;

int b=(int)Math.ceil(a/2);

int c=b-a;


System.out.println(b);

System.out.println(c);

2 个答案:

答案 0 :(得分:4)

你应该在这一行中使用2的浮点值而不是整数:

int b = (int) Math.ceil(a / 2f);//also you can use "2.0" or "2d" instead of "2f"

您的版本使用int除法(生成int2)和2f常量力来使用浮点除法并提升a值到float(在除法后产生float2.5

可能因为Multiplicative Operators的JLS规范:

  

对操作数(第5.6.2节)

执行二进制数字提升

这就是numeric promotion适用于我们案例中intfloat除法操作数的方式:

  

应用扩展基元转换(第5.1.2节)来转换由以下规则指定的一个或两个操作数:   如果任一操作数的类型为double,则另一个操作数转换为double。   否则,如果任一操作数的类型为float,则另一个操作数转换为float。

答案 1 :(得分:3)

你可以使用一个小技巧来加快速度:

int b =(a + 1) / 2;

由于你用2除以,如果数字是奇数+ 1,你将获得上舍入的精确值。如果数字为+ 1舍入,则会给出一半的预期结果。

修改

或者一般情况下,如果您想计算Math.ceil(a / b),可以使用以下公式进行计算:(a + b - 1) / b,假设a和b为正数。