关于C语言中double型输出的问题

main()
{
double a;
scanf("%lf",&a);
printf("%lf\n",a);
getch();
}

为什么这个double型不是有16位有效数字吗??为什么输入3.12121212 输出是3.121212???这跟float没区别啊???谢谢

%f格式化命令,float,double 默认只输出6位小数。

但是float,double可以表示的浮点数范围及精度是不同的。

例如1653

float a = 1.123456;

float b = 1.12345679;

例如:

ble占8字节 对应的格式为%lf

float占4字节 对应的格式为%f

当两个格式用反时,会造成程序读取数据并赋值时1653,赋值给变量时字节信息错位,导致数据错误。

float 存储数据格式为:1位的符号位+8位的指数位+23位尾数

double存储数据格式为:1位的符号位+11位的指数位+52位尾数

因此,错位存储的数据,解释输出来就差别非常大了。

扩展资料:

Data Output Stream类用于将Java语言中的基本类型数据写入输出流,如byte、int、float和boolean等类型。该类定义了许多以write开头,后面跟数据类型的方法,这些方法用于将指定数据类型的数据写入输出流,如下所示。

(1)writeBoolean():写boolean类型数据。

(2)writeByte():写byte类型数据。

(3)writeCliat():写char类型数据。

(4)writeDouble():写double类型数据。

(5)writeFloat():写float类型数据。

(6)writeInt():写int类型数据。

参考资料来源:百度百科-数据输出流

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-12-15
你理解错咯

double的意思是可以有16位有效数字
而在固定格式输出的时候,都默认的是6位
用double的时候f前面加l是没有效果的
你要输出长度,可以写,%0.8f,这样就是输出8个有效数字了本回答被提问者采纳
第2个回答  2010-05-25
你要想输出16位小数的话,那就用%.16lf 这样就能输出了,如果是float型的话,最多6位,否则就会出现一些奇怪的数字,至于直接 输出时都是6位的问题,我认为是printf在输出浮点型时都默认为%.6lf
第3个回答  2010-05-25
一个实型常量可以赋给一个 float 型、double 型或 long double 变量。根据变量的类型截取实型常量中相应的有效位数字。 一个实型常量可以赋给一个 float 型、double 型或 long double 变量。根据变量的类型截取实型常量中相应的有效位数字。
第4个回答  2010-05-25
%f格式化命令,float,double 默认只输出6位小数。
但是float,double可以表示的浮点数范围及精度是不同的。
例如
float a = 1.123456;
float b = 1.12345679;