关于C语言中double型输出的问题
{
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类型数据。
参考资料来源:百度百科-数据输出流
double的意思是可以有16位有效数字
而在固定格式输出的时候,都默认的是6位
用double的时候f前面加l是没有效果的
你要输出长度,可以写,%0.8f,这样就是输出8个有效数字了
但是float,double可以表示的浮点数范围及精度是不同的。
例如
float a = 1.123456;
float b = 1.12345679;