将int除以int并将结果存储为double时出现意外的结果

Bac*_*ash 4 java double int division

我有一个奇怪的问题.

这段代码只是将一个int除以另一个int,将结果存储在一个double变量中并打印出来:

int a = 200;
int b = 557;

double divisionResult = a / b;

System.out.println("Result: " + divisionResult);
Run Code Online (Sandbox Code Playgroud)

执行此代码后,输出为:

Result: 0
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为200/5570.3590664272890485

我注意到,如果我投abdouble在分割线

double divisionResult = (double) a / (double) b;
Run Code Online (Sandbox Code Playgroud)

它完美地运作.

为什么我必须将变量转换为double来获得真正的除法结果?

Mar*_*oun 7

因为在整数除法中,如果答案不是完整的整数,则小数点后的数字将被删除(整数除法产生整数值).

注意,您不必强制转换两个整数,只能转换一个,第二个将被隐式转换.

为什么在演员之后呢?

因为演员的优先级高于/.所以首先它投射,然后它分开.如果情况并非如此,那么你会得到0.0.