奇怪的Java数学执行

Ste*_*n D 2 java math

我有一个奇怪的问题.我试图将方程的结果存储到一个双变量中.

double s = (((100 + 1)*(1/3))/100 + (1/3));
Run Code Online (Sandbox Code Playgroud)

这将返回值0而不是.67(从计算器计算的正确值).这可能发生的原因是什么?

注意:说我可以使s = .67的解决方案不是解决方案,

提前致谢.

NPE*_*NPE 8

以下使用整数(即截断)除法,其结果为零:

1/3
Run Code Online (Sandbox Code Playgroud)

要获得浮点除法,请将任一参数转换为双精度,例如

1.0/3
Run Code Online (Sandbox Code Playgroud)

因此,整体表达式变为:

double s = (((100 + 1)*(1./3))/100 + (1./3));
Run Code Online (Sandbox Code Playgroud)

1.是一样的1.0.表达相同数字的其他方式double1d1D.

上面的表达式评估为0.6699999999999999.