浮点数与C中的十进制数

时间:2014-06-09 18:50:59

标签: c floating-point double floating-point-precision

以下代码:

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?

1 个答案:

答案 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