我有一个奇怪的问题。我试图将方程的结果存储到一个双变量中。
double s = (((100 + 1)*(1/3))/100 + (1/3));
返回值0而不是.67(从计算器计算的正确值)。这可能发生的原因是什么?
注意:说我可以使s = .67的解决方案不是解决方案,
提前致谢。
答案 0 :(得分:8)
以下使用整数(即截断)除法,其结果为零:
1/3
要获得浮点除法,请将任一参数转换为双精度,例如
1.0/3
因此,整体表达式变为:
double s = (((100 + 1)*(1./3))/100 + (1./3));
1.
与1.0
相同。与double
表达相同号码的其他方式有1d
和1D
。
上述表达式的评估结果为0.6699999999999999
。
答案 1 :(得分:3)
编译器将您的数字视为int ..
尝试这样:
double s = (((100d + 1d)*(1d/3d))/100d + (1d/3d));
现在结果将是:
0.6699999999999999