在C中,double比float更精确,并根据" C primerplus第六版"书(第80页),一个浮点数至少可以代表6个有效数字,一个双数字可以代表至少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;
}
这是该计划的输出:
Float : 3.333333
Double: 3.333333
为什么double值与float值具有相同的精度,而不是显示更多有效数字?
答案 0 :(得分:5)
您需要显示更多有效数字。如果你这样做:
printf("\nFloat: %.20f\n", a);
printf("Double: %.20f\n", b);
你会得到这个:
Float: 3.33333325386047363281
Double: 3.33333333333332992865
答案 1 :(得分:5)
大多数问题都可以通过咨询C标准来解答:
每个转换规范都由'%'字符引入...之后依次出现以下内容:
...
- 一个可选的精度,它给出了a,A,e,E,f和F转换说明符的基数字符后出现的位数。
描述f
说明符:
双参数应转换为“[ - ] ddd.ddd”样式的十进制表示法,其中基数字符后面的位数等于精度规格。 如果缺少精度,则应视为6 。
因此,只需使用%f
,即表示printf
在.
之后打印六位数字。如果要查看更多数字,则需要指定精度:%.15f
,例如。