c 语言中,为什么float型 对应的小数部分是6位?为什么

作者&投稿:源闵 (若有异议请与网页底部的电邮联系)
c语言中float类型为何只显示6位小数?~

因为一般都有原定设置,如果没有指名要求就只输出6位小数。如果想输出更多的小数可以写成:printf("%n.mf",a) %a为你所要输出的数,n为a中整数和小数位数加上小数点的总和,m为小数位数

printf("%f",fVal);//这是浮点默认输出格式,小数点保留6位
printf("%.1f",fVal);//.1是说明,小数点保留1位,对其后的数据进行四舍五入
printf("%.2f",fVal);//.2是说明,小数点保留2位,对其后的数据进行四舍五入,你想保留几位,就用点几
printf("%10f",fVal);//输出宽度为10个字符,右对齐,前补空格,小数点保留6位
printf("%10.2f",fVal);//输出宽度为10个字符,右对齐,前补空格,小数点保留2位
在格式化输出中,%f和%e默认都是都是六位,不过%e输出的话幂级数也占三位。
%10.3f
整个输出占10格(含.±号)小数占3格
默认
%f效果等于0.123456
%e效果等于0.12345e+01
float类型的精度,只能保证前6位是绝对精确的,而第7位可能是准确的,也可能是近似的。在设计时,打印浮点数是默认的六位数字。超过6位输出不精确的值,意义不大。如果第七个数字不准确,第八个数字就完全没有意义。小于6,有效数字更小。


扩展资料:
如果存储比精度更重要,可以考虑对浮点变量使用浮点类型。相反,如果精度是最重要的条件,则使用double。







浮点变量可以提升为更大的基数类型(从float到double)。当您对浮点变量执行运算时,通常会发生提升。该算法的执行精度始终与精度最高的变量相同。例如,考虑以下类型声明:
floatf_short;doublef_long;longdoublef_longer;f_short=f_short*f_long;
在前面的例子中,变量f_short被提升为double类型并乘以f_long;然后,结果循环为float类型,然后循环为f_short。

float型数据精度
有效数字 6-7 位,
比如存放 12345.53231 时,
只能精确到 12345.53。

这是C语言float类型的限制。

float和double的范围是由指数的位数来决定的。
float的指数位有8位,而double的指数位有11位,分布如下:
float:
1bit(符号位)
8bits(指数位)
23bits(尾数位)
double:
1bit(符号位)
11bits(指数位)
52bits(尾数位)
在数学中,特别是在计算机相关的数字(浮点数)问题的表述中,有一个基本表达法[1]:
value of floating-point = significand x base ^ exponent , with sign --- F.1
译为中文表达即为:
(浮点)数值 = 尾数 × 底数 ^ 指数,(附加正负号)---------------- F.2
于是,float的指数范围为-127~128,而double的指数范围为-1023~1024,并且指数位是按补码的形式来划分的。其中负指数决定了浮点数所能表达的绝对值最小的数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。
float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。
2 精度
float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。
float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。
http://www.cnblogs.com/c-primer/p/5992696.html

这是语法规定,没有为什么