Python3如何将float浮点数保留两位小数且不四舍五入、末尾补0
Python3 保留指定小数位且不四舍五入的实现方法
可以根据使用场景选择以下两种方案:
- 方案1:数学截断法(适合绝大多数常规场景)
核心逻辑是把原数放大10^n倍(n是要保留的小数位数)后截断整数部分,再缩小回原量级,最后格式化输出补全末尾0。
代码示例:
import math i = 31.807 # 保留2位小数,向0方向截断(兼容正负值) keep_digits = 2 truncated_num = math.trunc(i * (10 ** keep_digits)) / (10 ** keep_digits) # 格式化输出,自动补末尾0 result = f"{truncated_num:.{keep_digits}f}" print(result) # 输出:31.80
如果仅处理正数,也可以直接用int代替math.trunc简化代码:
i = 31.807 result = f"{int(i * 100) / 100:.2f}" print(result) # 输出:31.80
注意:如果遇到浮点数精度误差问题(比如部分小数浮点存储本身不精确,放大后和预期值有偏差),优先选择下方的字符串分割方案。
- 方案2:字符串分割法(完全规避浮点数精度误差)
直接对数值的字符串格式做拆分处理,从根源避免浮点运算的精度问题:
i = 31.807 keep_digits = 2 str_i = str(i) if '.' in str_i: integer_part, decimal_part = str_i.split('.', 1) # 小数位不足补0,再截取指定位数 processed_decimal = decimal_part.ljust(keep_digits, '0')[:keep_digits] result = f"{integer_part}.{processed_decimal}" else: # 无小数部分直接补对应位数的0 result = f"{str_i}.{'0' * keep_digits}" print(result) # 输出:31.80
内容的提问来源于stack exchange,提问作者mohsen
相关产品推荐
相关产品推荐

