Python保留两位小数的5种常用方法详解

在Python开发中,数值格式化是高频需求,尤其是金额、统计数据等场景,通常要求统一保留两位小数。本文整理5种主流实现方案,包含四舍五入精确处理、直接截取不进位、高精度运算等不同适用场景,附带完整代码与优缺点说明。

一、% 字符串格式化(基础通用)

这是Python经典格式化写法,兼容性极强,所有Python版本均可使用,会自动完成四舍五入并输出两位小数字符串。

示例代码

num = 12.345
# .2f 代表保留2位浮点小数
res = "%.2f" % num
print(res)  # 输出:12.35

特点

  1. 语法简单,新手易上手;
  2. 输出结果为字符串,适合直接打印展示;
  3. 自带四舍五入进位逻辑。

二、round() 内置函数(数值取整)

Python内置函数,直接对浮点数做保留小数运算,返回浮点数值,适合需要后续计算的场景。

示例代码

num = 12.345
new_num = round(num, 2)
print(new_num)  # 输出:12.35

重要注意点

round 并非传统四舍五入,采用四舍六入五成双规则:当小数第三位为5时,会看前一位奇偶判断是否进位,金融高精度计算不推荐单独使用。

三、decimal 高精度模块(金融计算首选)

普通浮点数存在二进制精度丢失问题,涉及金额、账目等精准计算时,必须使用decimal模块,可控进位规则,精度无误差。

示例代码

from decimal import Decimal

num = 12.345
# 0.00 指定保留两位小数,默认四舍六入五成双
result = Decimal(str(num)).quantize(Decimal("0.00"))
print(result)  # 输出:12.35

适用场景

银行结算、财务统计、科学计算等对数值精度要求极高的业务。

四、字符串切片截取(不四舍五入,直接截断)

将数字转为字符串,分割小数点后截取前两位小数,不会进位,直接舍弃多余小数,适合仅展示、不需要进位的场景。

示例代码

num = 12.345
s = str(num).split('.')
# 拼接整数部分 + 小数点 + 后两位小数
res = s[0] + '.' + s[1][:2]
print(res)  # 输出:12.34

缺点

仅能处理带小数点的数字,无小数时会报错,业务通用性较差。

五、re正则匹配截取(纯文本截取)

借助正则表达式匹配「整数.两位小数」格式,同样直接截断多余小数,不执行四舍五入操作。

示例代码

import re

num = 12.345
# 匹配数字.两位小数的片段
match = re.findall(r"\d+\.\d{2}", str(num))
print(match[0])  # 输出:12.34

适用场景

批量文本数据提取、日志数值截取等纯文本处理场景。

各方法优缺点总结

方法 是否四舍五入 返回类型 适用场景
%格式化 字符串 打印、页面展示
round() 四舍六入五成双 float 简单数值运算
decimal模块 可控进位,高精度 Decimal对象 财务、精密计算
字符串切片 直接截断 字符串 无需进位的简单展示
re正则截取 直接截断 字符串 批量文本提取

总结

  1. 日常打印展示优先选用 %.2f 格式化;
  2. 简单数值取整使用 round()
  3. 金额、高精度计算必须使用 decimal 模块;
  4. 不需要进位、单纯截取小数,选择字符串切片或正则。
posted @ 2026-07-23 22:42  code小说  阅读(1)  评论(0)    收藏  举报