奇怪的Java数学执行

时间:2013-03-24 14:18:51

标签: java math

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

double s = (((100 + 1)*(1/3))/100 + (1/3));

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

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

提前致谢。

2 个答案:

答案 0 :(得分:8)

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

1/3

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

1.0/3

因此,整体表达式变为:

double s = (((100 + 1)*(1./3))/100 + (1./3));

1.1.0相同。与double表达相同号码的其他方式有1d1D

上述表达式的评估结果为0.6699999999999999

答案 1 :(得分:3)

编译器将您的数字视为int ..

尝试这样:

double s = (((100d + 1d)*(1d/3d))/100d + (1d/3d));

现在结果将是:

0.6699999999999999