单精度和双精度浮点数怎样输出

abc45628 2012-12-11 09:15:40
在VC++6.0时写下列代码

#include<stdio.h>
void main()
{
double a=1234567890.1234567890123;
printf("%lf",a);
}

代码如上,%lf应该用于double型,%f用于float型,为何用%lf和%f输出都是同一个答案1234567890.123457
还有最后的数字是四舍五入的吗?

#include<stdio.h>
void main()
{
double a=12345678901234567890123.4567890;
printf("%f",a);
}

当这样的时候,输出为12345678901234568000000.000000,小数部分和整数部分为什么多出这么多0
...全文
1777 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zodiac1111 2012-12-11
  • 打赏
  • 举报
回复
看看浮点数的定义就知道了,计算机更本就不懂得四舍六入五奇偶,只知道0和1,结构中怎么排,人家就怎么算成数,当然还被printf插上一脚
打败夜宵摊 2012-12-11
  • 打赏
  • 举报
回复
引用 1 楼 AnYidan 的回复:
printf(), 格式化符号与参数类型不匹配,结果未定义
应该不是吧,printf本身就是要格式化输出,就是把要输出的东西先格式化了再输出,就不会出现说类型不匹配,结果未定义吧。不知道这样理解对不对
abc45628 2012-12-11
  • 打赏
  • 举报
回复
引用 1 楼 AnYidan 的回复:
printf(), 格式化符号与参数类型不匹配,结果未定义
这是对第一段代码的解释还是第二段,如果是第二段的话,就算改成%lf进行输出,得到的结果仍然是一样的
打败夜宵摊 2012-12-11
  • 打赏
  • 举报
回复
是不是因为双精度浮点型数只有16位有效数
AnYidan 2012-12-11
  • 打赏
  • 举报
回复
printf(), 格式化符号与参数类型不匹配,结果未定义

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧