5人参与 • 2026-03-18 • Python
日常写 python 代码时,保留小数是高频需求 —— 比如电商系统显示订单金额(保留 2 位)、数据分析展示百分比(保留 1 位)、实验报告输出测量结果(保留 3 位)。很多新手只会用round()函数,却不知道它有 “坑”,也不清楚不同场景该选哪种方法。
今天就给大家整理 6 种 python 保留小数的常用方法,从基础到进阶,代码示例可直接复制运行,每个方法都讲清 “怎么用、适用场景、注意事项”,新手也能秒懂!
举个直观例子:计算10/3得到3.3333333333333335,但我们需要:
3.33(保留 2 位);3.3(保留 1 位);3.3333333333(避免精度丢失)。不同场景对应不同方法,下面逐个拆解。
round()是 python 内置函数,语法简单:round(数字, 保留位数),核心是四舍五入,适合快速保留小数。
代码示例
# 基础用法
num = 10 / 3
print(f"原始值:{num}") # 输出:3.3333333333333335
# 保留2位小数
print(f"保留2位:{round(num, 2)}") # 输出:3.33
# 保留1位小数
print(f"保留1位:{round(num, 1)}") # 输出:3.3
# 不指定位数,默认保留0位(取整)
print(f"保留0位:{round(num)}") # 输出:3
# 特殊情况:四舍五入的“坑”(不是纯数学的四舍五入)
print(round(2.675, 2)) # 预期2.68,实际输出2.67(浮点数精度问题)
核心解析
2.675保留 2 位得到2.67);用%_.xf的格式(x 为保留位数),本质是格式化输出,不改变数字本身,适合 “展示结果”。
代码示例
num = 10 / 3
print(f"原始值:{num}") # 3.3333333333333335
# 保留2位小数(%_.2f)
print("保留2位:%.2f" % num) # 输出:3.33
# 保留3位小数(%_.3f)
print("保留3位:%.3f" % num) # 输出:3.333
# 补零:比如1.5保留2位,自动补0
print("补零示例:%.2f" % 1.5) # 输出:1.50
核心解析
format()是 python 官方推荐的格式化函数,语法:format(数字, '.xf'),比%占位符更灵活,支持更多格式。
代码示例
num = 10 / 3
# 基础用法:保留2位
print("保留2位:{}".format(format(num, '.2f'))) # 输出:3.33
# 简写形式(更常用)
print("保留2位(简写):{:.2f}".format(num)) # 输出:3.33
# 保留1位+补零
print("保留1位+补零:{:.1f}".format(1.5)) # 输出:1.5
# 结合其他格式(比如加千分位)
print("加千分位+保留2位:{:,.2f}".format(12345.6789)) # 输出:12,345.68
核心解析
f-string 是 python3.6 新增的格式化方式,语法:f"{数字:.xf}",兼顾简洁和灵活,是日常开发的 “首选”。
代码示例
num = 10 / 3
# 保留2位小数
print(f"保留2位:{num:.2f}") # 输出:3.33
# 保留3位小数
print(f"保留3位:{num:.3f}") # 输出:3.333
# 保留1位+补零
print(f"保留1位+补零:{1.5:.1f}") # 输出:1.5
# 结合变量(动态指定保留位数)
n = 2
print(f"动态保留{n}位:{num:.{n}f}") # 输出:3.33
核心解析
前面的方法都有浮点数精度问题,而decimal模块专门解决 “高精度小数计算”,适合金融、金额等对精度要求高的场景。
代码示例
from decimal import decimal, round_half_up
# 解决round(2.675, 2)的精度问题
num = decimal('2.675') # 注意:用字符串初始化,避免浮点数精度丢失
# 保留2位小数,四舍五入
res = num.quantize(decimal('0.00'), rounding=round_half_up)
print(f"高精度保留2位:{res}") # 输出:2.68
# 对10/3进行高精度保留
num2 = decimal('10') / decimal('3')
res2 = num2.quantize(decimal('0.0000')) # 保留4位
print(f"10/3保留4位:{res2}") # 输出:3.3333
核心解析
如果处理的是 numpy 数组(数据分析、机器学习常用),用numpy.round()更高效,支持对整个数组保留小数。
代码示例
import numpy as np
# 生成numpy数组
arr = np.array([10/3, 2.675, 1.5])
print(f"原始数组:{arr}") # 输出:[3.33333333 2.675 1.5 ]
# 对整个数组保留2位小数
arr_round = np.round(arr, 2)
print(f"保留2位后的数组:{arr_round}") # 输出:[3.33 2.68 1.5 ]
核心解析
pip install numpy);# 看似2.675,实际存储的是近似值 print(2.675) # 输出:2.6749999999999998
这就是round(2.675, 2)得到2.67的原因 —— 浮点数在计算机中是二进制存储,部分十进制小数无法精确表示。
python 的round()不是纯数学的四舍五入,而是 “四舍六入五成双”(银行家舍入):
round(1.5)=2,round(2.5)=2(5 后面无数字,保留位 0 是偶数,舍去)。res = "%.2f" % 10/3 # 错误:字符串不能直接除法
# 正确做法:转成浮点数
res = float("%.2f" % (10/3))
print(res + 1) # 输出:4.33
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| round() | 内置函数,简洁 | 精度问题、四舍五入坑 | 简单计算、非高精度展示 |
| % 占位符 | 自动补零,适合展示 | 返回字符串 | 终端输出、简单报表 |
| format() | 灵活,支持多格式 | 返回字符串 | 复杂展示(千分位、对齐) |
| f-string | 最简洁,支持动态位数 | python3.6+、返回字符串 | python3.6 + 的日常展示(首选) |
| decimal 模块 | 高精度,无精度丢失 | 语法稍复杂 | 金融、金额、高精度计算 |
| numpy.round | 批量处理数组高效 | 需安装 numpy | 数据分析、机器学习(数组处理) |
f-string({num:.2f}),简洁又灵活;decimal模块,避免精度丢失;numpy.round();round(),但注意它的四舍五入规则;float()转成数字。建议大家把文中的代码逐个运行一遍,改改保留位数、换几个数字,就能快速掌握不同方法的差异。保留小数看似简单,选对方法能避免很多隐藏问题,尤其是金融场景,千万别只用round()哦!
以上就是python保留小数的6种常用方法的详细内容,更多关于python保留小数方法的资料请关注代码网其它相关文章!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论