如何在Python中按指定位置截取小数?示例:3.14373873→3.14
Python 截取小数到指定位数的方法
在Python里要把小数截取到指定位数,有几种实用的方法,根据你的需求选就行:
- 使用
round()函数快速四舍五入
这是最常用的方法,直接传入数值和要保留的小数位数:
num = 3.14373873 rounded_num = round(num, 2) print(rounded_num) # 输出 3.14
注意:round()遵循“银行家舍入法”(四舍六入五成双),如果遇到末尾是5的情况,会取最近的偶数,比如round(3.145, 2)可能得到3.14而非3.15,这是浮点数精度的特性。
- 字符串格式化(适合输出或精确控制显示)
如果需要直接得到格式化后的字符串,或者明确的四舍五入结果,用f-string或format()函数:
num = 3.14373873 # f-string方式 formatted_str = f"{num:.2f}" print(formatted_str) # 输出 "3.14" # 转成数值类型 formatted_num = float(formatted_str) # format函数方式 formatted_str2 = format(num, ".2f")
这种方法的四舍五入逻辑更符合日常认知,适合需要输出固定位数小数的场景。
- 数学运算直接截断(不四舍五入)
如果不需要四舍五入,只想直接截断到指定位数,可以通过乘10的n次方取整再除以10的n次方:
num = 3.14373873 truncated_num = int(num * 100) / 100 print(truncated_num) # 输出 3.14
注意:浮点数本身的精度问题可能导致意外结果,比如int(3.149999999999 * 100)可能得到314而非315,对精度要求高的话不建议用这个方法。
decimal模块(高精度场景首选)
如果涉及金融、高精度计算,推荐用decimal模块,它可以精确控制舍入规则:
from decimal import Decimal, ROUND_DOWN, ROUND_HALF_UP num = Decimal('3.14373873') # 直接截断到两位小数 truncated_result = num.quantize(Decimal('0.00'), rounding=ROUND_DOWN) print(truncated_result) # 输出 Decimal('3.14') # 四舍五入到两位小数 rounded_result = num.quantize(Decimal('0.00'), rounding=ROUND_HALF_UP) print(rounded_result) # 输出 Decimal('3.14') # 转成float类型(如果需要) float(truncated_result)
这个方法完全避免了浮点数精度误差,舍入规则也可以灵活配置。
内容的提问来源于stack exchange,提问作者Tan
相关产品推荐
相关产品推荐

