You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 12:36:03