在C中,double比float更精确,根据"C primerplus第六版"一书(第80页),浮点数可以代表至少6位有效数字,而double可以代表至少13位有效数字.所以我尝试用这个简单的例子验证:
#include<stdio.h>
int main(void){
float a = 3.3333333; // 7 significant digits
double b = 3.33333333333333;// 14 significant digits
printf("\nFloat: %f\n", a);
printf("Double: %f\n", b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是该计划的输出:
Float : 3.333333
Double: 3.333333
Run Code Online (Sandbox Code Playgroud)
为什么double值与float值具有相同的精度,而不是显示更多有效数字?
您需要显示更多有效数字.如果你这样做:
printf("\nFloat: %.20f\n", a);
printf("Double: %.20f\n", b);
Run Code Online (Sandbox Code Playgroud)
你会得到这个:
Float: 3.33333325386047363281
Double: 3.33333333333332992865
Run Code Online (Sandbox Code Playgroud)
这样的大多数问题可以通过咨询C标准来回答:
每个转换规范都由'%'字符引入...之后按顺序出现以下内容:
...
- 一个可选的精度,它给出了a,A,e,E,f和F转换说明符的基数字符后出现的位数.
描述说明f符:
double参数应转换为"[ - ] ddd.ddd"样式的十进制表示法,其中基数字符后面的位数等于精度规范.如果缺少精度,则应取6.
因此,通过简单地使用%f,您指示printf在打印后打印六位数..如果要查看更多数字,则需要指定精度:%.15f例如.