Python保留两位小数的5种常用方法详解
在Python开发中,数值格式化是高频需求,尤其是金额、统计数据等场景,通常要求统一保留两位小数。本文整理5种主流实现方案,包含四舍五入精确处理、直接截取不进位、高精度运算等不同适用场景,附带完整代码与优缺点说明。
一、% 字符串格式化(基础通用)
这是Python经典格式化写法,兼容性极强,所有Python版本均可使用,会自动完成四舍五入并输出两位小数字符串。
示例代码
num = 12.345
# .2f 代表保留2位浮点小数
res = "%.2f" % num
print(res) # 输出:12.35
特点
- 语法简单,新手易上手;
- 输出结果为字符串,适合直接打印展示;
- 自带四舍五入进位逻辑。
二、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正则截取 | 直接截断 | 字符串 | 批量文本提取 |
总结
- 日常打印展示优先选用
%.2f格式化; - 简单数值取整使用
round(); - 金额、高精度计算必须使用
decimal模块; - 不需要进位、单纯截取小数,选择字符串切片或正则。
浙公网安备 33010602011771号