浮点算术无法按预期工作

use*_*466 2 java math variables double

以下简单浮点算术运算未按预期工作.

double den = (1+j);
System.out.println(den);
den = 1/den;
System.out.println(den);

double newden = 1/(1+j);
System.out.println(newden);
Run Code Online (Sandbox Code Playgroud)

上面的代码给出了以下输出.

7.0
0.14285714285714285
0.0

如上所示,前两个操作按预期工作,但最后一个不工作.我想它与变量类型有关,但仍然没有弄清楚问题.

你能解释一下Java中算术运算的行为吗?

Pan*_*hal 8

int如果没有float/double/long涉及,则在java中进行算术运算.因此,将其中一个arg更改为float/double并按预期工作.

以下代码可以工作:

double newden = 1d/(i+j);
System.out.println(newden);
Run Code Online (Sandbox Code Playgroud)

java规范:

应用扩展基元转换(第5.1.2节)来按以下规则转换其中一个或两个操作数,顺序如下:

  • 如果任一操作数的类型为double,则另一个操作数转换为double.
  • 否则,如果任一操作数的类型为float,则另一个操作数转换为float.
  • 否则,如果任一操作数的类型为long,则另一个操作数转换为long.
  • 否则,两个操作数都将转换为int类型.

  • 为什么在想要双重时使用花车?你可以简单地使用`1d /(1 + j)` (3认同)