整型除法:为什么结果是 1/3 == 0?

2022-08-31 08:02:40

我正在写这个代码:

public static void main(String[] args) {
    double g = 1 / 3;
    System.out.printf("%.2f", g);
}

结果为 0。为什么会这样,我该如何解决这个问题?


答案 1

两个操作数(1 和 3)是整数,因此使用整数算术(此处除法)。将结果变量声明为双精度值只会导致在除法后发生隐式转换。

整数除法当然返回四舍五入为零的除法的真实结果。因此,此处的结果向下舍入为 0。(请注意,处理器实际上并不进行任何舍入,但您仍然可以这样想。0.333...

另外,请注意,如果两个操作数(数字)都以浮点数给出;3.0和1.0,甚至只是一个,然后使用浮点算术,给你.0.333...


答案 2

1/3使用整数除法,因为两边都是整数。

您至少需要其中一个是 或 。floatdouble

如果您像问题一样在源代码中输入值,则可以执行 ;是双打。1.0/31.0

如果从其他位置获取值,则可以使用 将 转换为 .(double)intdouble

int x = ...;
int y = ...;
double value = ((double) x) / y;