Int除法:为什么1/3的结果== 0?

新手上路,请多包涵

我正在写这段代码:

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

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

原文由 Tofiq 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 695
2 个回答

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

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

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

原文由 Noldorin 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

您至少需要其中一个是 floatdouble

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

如果您从其他地方获取值,则可以使用 (double)int 变成 double

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

原文由 Adrian Smith 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题