以下代码:
int main()
{
float a=0.7;
printf("%.10f %.10f\n",0.7, a);
return 0;
}
给出0.7000000000 0.6999999881作为答案,而下面的代码:
int main()
{
float a=1.7;
printf("%.10f %.10f\n",1.7, a);
return 0;
}
输出1.7000000000 1.7000000477。
为什么在第一种情况下打印时我得到的值小于0.7而在第二种情况下超过1.7?
答案 0 :(得分:3)
将浮点常量传递给printf
时,会将其作为double
传递。
所以它与传递float
变量与"相同"不同价值为printf
。
将此常量值更改为0.7f
(或1.7f
),您将获得相同的结果。
或者,将float a
更改为double a
,您也会获得相同的结果。
选项#1:
double a = 0.7;
printf("%.10f %.10f\n",0.7,a);
// Passing two double values to printf
选项#2:
float a = 0.7;
printf("%.10f %.10f\n",0.7f,a);
// Expanding two float values to double values and passing them to printf