2

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

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

这将返回一个值 0 而不是 0.67(从计算器计算出的正确值)。为什么会发生这种情况?

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

提前致谢。

4

2 回答 2

8

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

1/3

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

1.0/3

因此,整体表达式变为:

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

1.是一样的1.0。表示与 a 相同的数字的其他方式double1d1D

上面的表达式计算为0.6699999999999999

于 2013-03-24T14:19:30.243 回答
3

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

试试这样:

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

现在结果将是:

0.6699999999999999

于 2013-03-24T14:22:33.267 回答