关于C++ printf()函数的一点疑问
伊谢尔伦
伊谢尔伦 2017-04-17 12:08:39
[C++讨论组]

初学C++,对于printf()函数的精度指示符有一点疑问。

因为之前学过其他语言,所以在解决四舍五入的问题的时候使用了printf()函数,但是发现:

float x=20.095;
printf("%.2f",x);

这样输出的是20.09,而不是正常四舍五入的20.10。
但如果是另一种情况:

float x=20.085;
printf("%.2f",x);

20.09就能够正常的输出

请教一下,这是因为什么原因导致的?搜索了一下没有找到相关的说明,书上也没有具体解释。
如果想要正常的四舍五入,对于初学者,比较简单的解决方案是什么?
谢谢!

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(1)
怪我咯

不是printf()的问题,是精度问题,20.085在计算机内存中并不是精确的,实际上这个值无法用二进制精确表示。它的小数部分的前面几十位是0.00010101110000101000111101011100001010001111011,早已超出float的精度了。所以会以近似值存储,不巧的是,这个近似值比20.085要小一点点,所以四舍五入的时候自然就会被舍掉了。
你可以看看这篇文章:http://www.cnblogs.com/antineutrino/p/4525224.html

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号