printf("%.2lf\n",odd); //(1)
printf("%.2lf\n",37.975); //(2)
printf("%.2lf\n",(odd*0.65 -1)*2); //(3)
printf("%.3lf\n",(odd*0.65 -1)*2); //(4)
以下是输出:
30.75
37.98
37.97
37.975
为什么表达式(3)的输出不是37.98?
我使用g ++。
答案 0 :(得分:3)
这可能是由于浮点舍入错误造成的。 (odd * 0.65 - 1) * 2
的结果可能是37.97499999999999
或接近(但小于)37.975
的结果。按照通常的舍入规则,这会在输出中向下舍入到37.97
。
答案 1 :(得分:2)
由于odd
设置为37.975会得到不同的结果,原因很可能是odd
比计算中的30.75略小于(你不是在你的问题中显示它未圆整)这使计算结果的数字略小于37.975。
答案 2 :(得分:1)
计算机(二进制)浮点不能精确表示十进制数,就像十进制浮点不能代表某些分数一样。例如1/9 = .11111111111 ....显示更多精度数字,你会看到发生了什么。
由于您没有提供odd
的值,我选择的结果相同:
#include <stdio.h>
int main()
{
double odd = 30.7499;
printf("%.2lf\n",odd); //(1)
printf("%.2lf\n",37.975); //(2)
printf("%.2lf\n",(odd*0.65 -1)*2); //(3)
printf("%.3lf\n",(odd*0.65 -1)*2); //(4)
printf("%.20lf\n",odd); //(1)
printf("%.20lf\n",37.975); //(2)
printf("%.20lf\n",(odd*0.65 -1)*2); //(3)
printf("%.20lf\n",(odd*0.65 -1)*2); //(4)
return 0;
}
30.75
37.98
37.97
37.975
30.74990000000000000000
37.97500000000000100000
37.97487000000000300000
37.97487000000000300000