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

main(){doublea;scanf("%lf",&a);printf("%lf\n",a);getch();}为什么这个double型不是有16位有效数字吗??为什... main()
{
double a;
scanf("%lf",&a);
printf("%lf\n",a);
getch();
}

为什么这个double型不是有16位有效数字吗??为什么输入3.12121212 输出是3.121212???这跟float没区别啊???谢谢
展开
 我来答
帐号已注销
2020-11-06 · TA获得超过77万个赞
知道小有建树答主
回答量:4168
采纳率:93%
帮助的人:157万
展开全部

%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类型数据。

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

百度网友52aeb54
推荐于2017-12-15 · TA获得超过2995个赞
知道小有建树答主
回答量:1261
采纳率:0%
帮助的人:1149万
展开全部
你理解错咯

double的意思是可以有16位有效数字
而在固定格式输出的时候,都默认的是6位
用double的时候f前面加l是没有效果的
你要输出长度,可以写,%0.8f,这样就是输出8个有效数字了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
望穿秋水待伊人
2010-05-25 · TA获得超过644个赞
知道小有建树答主
回答量:708
采纳率:100%
帮助的人:789万
展开全部
你要想输出16位小数的话,那就用%.16lf 这样就能输出了,如果是float型的话,最多6位,否则就会出现一些奇怪的数字,至于直接 输出时都是6位的问题,我认为是printf在输出浮点型时都默认为%.6lf
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhendemomo
2010-05-25 · TA获得超过695个赞
知道小有建树答主
回答量:279
采纳率:0%
帮助的人:209万
展开全部
一个实型常量可以赋给一个 float 型、double 型或 long double 变量。根据变量的类型截取实型常量中相应的有效位数字。 一个实型常量可以赋给一个 float 型、double 型或 long double 变量。根据变量的类型截取实型常量中相应的有效位数字。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
daimm_know
2010-05-25 · TA获得超过891个赞
知道小有建树答主
回答量:304
采纳率:0%
帮助的人:245万
展开全部
%f格式化命令,float,double 默认只输出6位小数。
但是float,double可以表示的浮点数范围及精度是不同的。
例如
float a = 1.123456;
float b = 1.12345679;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式