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

时间:2013-05-02 11:55:28

标签: java int double division

我遇到了一个奇怪的问题。

此代码简单地将int除以另一个int,将结果存储在double变量中并打印出来:

int a = 200;
int b = 557;

double divisionResult = a / b;

System.out.println("Result: " + divisionResult);

执行此代码后,输出为:

Result: 0

这很奇怪,因为200/5570.3590664272890485

我注意到如果我在分界线中投放abdouble

double divisionResult = (double) a / (double) b;

效果很好。

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

4 个答案:

答案 0 :(得分:6)

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

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

为什么演员表演之后呢?

因为演员的优先级高于/。所以首先它投射,然后它分开。如果不是这种情况,您将获得0.0

答案 1 :(得分:1)

a是int,而b是int,除了a / b得到一个int值,所以0.35转换为int变为0.所以你必须把它转换为

double d = (double)a/b;

答案 2 :(得分:0)

与往常一样,在将结果分配给左侧指定的变量之前,会执行赋值运算符右侧的任何计算。当执行计算时,它是两个int s之间的一个除法,它是一个整数除法,(我确定你知道),产生一个整数结果(即没有任何余数的商)。只有在执行此计算之后,才会将整数除法的结果(即0)转换为double。

正如您所观察到的,将int中的一个或两个更改为double会使计算成为双重除法,而不是整数除法。

答案 3 :(得分:0)

因为你现在这样做的方式是这样的:

您对a和b执行整数分割。结果是整数0.之后,您将结果分配给double。

你可以将a或b转换为double,Java会识别出来并给你一个双倍的结果。