You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中f-string格式化采用的舍入类型是什么?

Python中str.format的舍入类型分析

测试代码及运行结果:

List = [0.0505, 0.0515, 0.0525, 0.0535, 0.0545, 
     0.0555, 0.0565, 0.0575, 0.0585, 0.0595]

print(['{:.3f}'.format(p) for p in List])

运行输出:

['0.051', '0.051', '0.052', '0.053', '0.054', 
'0.056', '0.057', '0.058', '0.059', '0.059']

第三位小数的变化规律:

  • 第0个元素:0→1
  • 第1至4个元素:小数位1、2、3、4均保持不变
  • 第5至8个元素:小数位5→6、6→7、7→8、8→9
  • 第9个元素:9保持为9

舍入类型说明

Python的str.format(包括f-string)采用的是银行家舍入(Bankers Rounding),即四舍六入五成双规则。你看到的看似不对称的结果,核心原因是浮点数的二进制存储精度问题:
比如0.0505无法用二进制精确表示,实际存储的值略大于0.0505,按规则向上舍入到0.051;而0.0515实际存储的值略小于0.0515,因此向下舍入保留0.051。

与numpy.round的差异

numpy.round同样遵循银行家舍入,但它的处理逻辑更贴合十进制的精确计算预期,所以得到的结果为:

import numpy as np
print(np.round(List, 3))
# 输出:array([0.05 , 0.052, 0.052, 0.054, 0.054, 0.056, 0.056, 0.058, 0.058, 0.06 ])

两者差异本质是浮点数底层存储和处理逻辑的不同,而非舍入规则本身的区别。

内容的提问来源于stack exchange,提问作者Éderson D'Martin Costa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 22:15:17