printf格式化输出问题

乐此不痞 2010-11-17 05:22:49
float f=3.1415f;
printf("%4.3f", f);

为什么在VS2008和devcpp里面输出都是:3.141
而不是3.142
请高手解疑。
...全文
126 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
乐此不痞 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 cdsxyx 的回复:]

引用 8 楼 nofailure 的回复:

引用 6 楼 cdsxyx 的回复:

引用 5 楼 nofailure 的回复:

引用 4 楼 cdsxyx 的回复:

用double吧,double f=3.1415; 应该是精度问题


用double结果也是一样的

3.1415后面的f去掉没


去掉f就对了,谢谢

浮点数不能精确存储的,用prin……
[/Quote]

这种说法让人信服
乐此不痞 2010-11-17
  • 打赏
  • 举报
回复
虽然用double正常了,但是还是不明白为什么float类型时
3.1416 -> 3.142
3.1445 -> 3.145
  • 打赏
  • 举报
回复
很怪的问题:
楼主的数据后跟了个f,我去掉了f.
试验:如果是double型,输出的是3.142如果是float型,则输出的是3.141
如果是float型,但原数等于3.1416则输出是3.142.
怪....精度问题?
半斗 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 nofailure 的回复:]

引用 6 楼 cdsxyx 的回复:

引用 5 楼 nofailure 的回复:

引用 4 楼 cdsxyx 的回复:

用double吧,double f=3.1415; 应该是精度问题


用double结果也是一样的

3.1415后面的f去掉没


去掉f就对了,谢谢
[/Quote]
浮点数不能精确存储的,用printf("%4.16f", f);输出看看就知道了
Csuxiaowu 2010-11-17
  • 打赏
  • 举报
回复
试了下 好像以5为分割的
乐此不痞 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 cdsxyx 的回复:]

引用 5 楼 nofailure 的回复:

引用 4 楼 cdsxyx 的回复:

用double吧,double f=3.1415; 应该是精度问题


用double结果也是一样的

3.1415后面的f去掉没
[/Quote]

去掉f就对了,谢谢
  • 打赏
  • 举报
回复
就是个控制输出格式的问题!

你不是指定要输出小数点后面3位吗?
半斗 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 nofailure 的回复:]

引用 4 楼 cdsxyx 的回复:

用double吧,double f=3.1415; 应该是精度问题


用double结果也是一样的
[/Quote]
3.1415后面的f去掉没
乐此不痞 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cdsxyx 的回复:]

用double吧,double f=3.1415; 应该是精度问题
[/Quote]

用double结果也是一样的
半斗 2010-11-17
  • 打赏
  • 举报
回复
用double吧,double f=3.1415; 应该是精度问题
乐此不痞 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 csuxiaowu 的回复:]

你要它要给你做四舍五入
[/Quote]

如果是3.1416输出为3.142;
如果是3.1445输出为3.145;
所以想不明白
yiruirui0507 2010-11-17
  • 打赏
  • 举报
回复
它给你做四舍五入拉
Csuxiaowu 2010-11-17
  • 打赏
  • 举报
回复
你要它要给你做四舍五入

69,371

社区成员

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

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