c++ - 为什么 printf 输出浮点 1.45 有一位小数,而 1.445 有两位小数在不同的行为中?
问题描述
printf("%.1f, %.2f", 1.45, 1.445);
输出
1.4, 1.45
1.45 是切片的,但 1.445 是四舍五入的。
我发现了这个, 为什么 printf 舍入浮点数? 这解释了规范建议对浮点数进行舍入。
编辑:我用 VS2017(在 C++ 项目中)和 Dev-C 对其进行了测试。
解决方案
[已编辑:我最初并没有将它们打印到足够荒谬的精度水平,因此答案给出了结果背后的错误推理。]
如果您将它们打印到荒谬的精确度,那么真相就会出现:
#include <stdio.h>
printf("%20.20f, %20.20f", 1.45, 1.445);
结果:
1.44999999999999995559, 1.44500000000000006217
因此,转换后,1.45 最终会比 1.45小一点,而 1.445 最终会比 1.445 稍微大一点。
所以,当然,当我们舍入 1.45 时,它会向下舍入,但是当我们舍入 1.445 时,它会向上舍入。
推荐阅读
- mql4 - 请告诉我 MQL4 元编辑器中的交易功能 OrderOpenTime
- android - Room Database:如何一次性获取数据?
- azure-data-factory-2 - 数据工厂表达式子字符串?有没有类似的功能?
- bash - 使用 Git Bash 在某处复制文件夹的脚本
- video - 使用 FFMPEG 创建的视频无法在 IOS/Safari 上播放
- azure-sql-database - sys.sp_cdc_stop_job 不在服务器上
- php - ( wordpress ) elementor 投资组合类别(全部)
- php - 如何使用 PHP 和 imagemagick 改变图像的形状?
- reactjs - React JS TypeError:无法读取未定义的属性(读取“长度”)
- python - 在 Python 中查找二维数组(非常大)中的值