Python 3.11浮点数精准打印需求:截断保留指定位数而非四舍五入
Python 3.11 实现指定小数位数截断输出(非四舍五入)
需求说明
需打印数字10.235689并显示为10.23,要求:
- 不引入新变量
- 不修改原数值
- 避免四舍五入得到
10.24 - 支持指定小数点后打印位数
实现方案
方法1:数学运算截断(适用于正数)
通过将原数放大指定倍数后取整,再缩小回原量级,实现纯截断效果:
# 保留2位小数 print((int(10.235689 * 100)) / 100) # 保留3位小数(可指定位数) print((int(10.235689 * 10**3)) / 10**3)
输出结果分别为10.23和10.235,完全符合要求,未修改原数值且无额外变量。
方法2:通用截断(支持正负数值)
若需处理负数,用math.trunc()实现向零取整,避免int()对负数的向下取整偏差:
import math # 正数保留2位小数 print(math.trunc(10.235689 * 100) / 100) # 负数保留2位小数 print(math.trunc(-10.235689 * 100) / 100)
输出结果分别为10.23和-10.23,截断逻辑统一适配正负场景。
方法3:字符串切片处理
直接通过字符串分割与切片实现截断,无需数学运算:
# 保留2位小数 print('.'.join([str(10.235689).split('.')[0], str(10.235689).split('.')[1][:2]])) # 保留3位小数 print('.'.join([str(10.235689).split('.')[0], str(10.235689).split('.')[1][:3]]))
注:若原数为整数(无小数点),可添加兼容逻辑:
# 兼容整数与小数的通用写法 num_str = str(10.235689) print('.'.join([s[:2] if i ==1 else s for i,s in enumerate(num_str.split('.'))]) if '.' in num_str else num_str)
内容的提问来源于stack exchange,提问作者me my
相关产品推荐
相关产品推荐

