我正在写这段代码:
public static void main(String[] args) {
double g = 1 / 3;
System.out.printf("%.2f", g);
}
结果为0。这是为什么,我该如何解决这个问题?
原文由 Tofiq 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在写这段代码:
public static void main(String[] args) {
double g = 1 / 3;
System.out.printf("%.2f", g);
}
结果为0。这是为什么,我该如何解决这个问题?
原文由 Tofiq 发布,翻译遵循 CC BY-SA 4.0 许可协议
1/3
使用整数除法,因为两边都是整数。
您至少需要其中一个是 float
或 double
。
如果您像问题一样在源代码中输入值,则可以执行 1.0/3
; 1.0
是双倍的。
如果您从其他地方获取值,则可以使用 (double)
将 int
变成 double
。
int x = ...;
int y = ...;
double value = ((double) x) / y;
原文由 Adrian Smith 发布,翻译遵循 CC BY-SA 2.5 许可协议
8 回答6k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
1 回答2.2k 阅读✓ 已解决
3 回答1.6k 阅读✓ 已解决
两个操作数(1 和 3)是整数,因此使用整数运算(此处为除法)。将结果变量声明为 double 只会导致 在除法之后 发生隐式转换。
整数除法当然会返回向零四舍五入的除法的真实结果。
0.333...
的结果在这里向下舍入为 0。 (请注意,处理器实际上并没有进行任何舍入,但您仍然可以这样想。)另外,请注意如果 两个 操作数(数字)都以浮点数形式给出; 3.0 和 1.0,甚至只是第 _一个_,然后使用浮点运算,给你
0.333...
。