在此C程序中,为什么不对'double'存储/打印比'float'精度更高的精度值?

时间:2019-01-21 14:15:11

标签: c floating-point double precision

如果我运行以下代码:

float a=1.123456789;
printf("The float value is %f\n",a);
double b=1.123456789876543
printf("The double value is %lf",b);

它打印:

  

浮点值为1.123457

     

双精度值是1.123457

第一行是可以理解的,因为float的精度为〜6个十进制数字。但是第二行不应该显示更多数字吗?如果有帮助,我正在为Windows使用Turbo C ++ 4.0。

2 个答案:

答案 0 :(得分:5)

%f格式说明符默认情况下输出6位精度。如果要打印更多数字,则需要在格式说明符中添加精度:

float a=1.123456789;
printf("The float value is %.15f\n",a);
double b=1.123456789876543;
printf("The double value is %.15lf",b);

输出:

The float value is 1.123456835746765
The double value is 1.123456789876543

答案 1 :(得分:1)

对于两种情况,您看到的值都是相同的,因为如果省略了精度,则将其取为6。

此外,根据默认参数提升,任何浮点类型都将提升为double,这也是%f转换规范的要求。

C11格式说明符(强调我的

引用f,第§7.21.6.1章。
  

双精度参数应转换为“ [-] ddd.ddd”形式的十进制表示法,其中基数字符后的位数等于精度规范。 如果精度丢失,则应取为6

如果要在小数点后增加位数(精度更高),则需要明确提及精度值,该值应大于6。