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

Python如何不四舍五入截断浮点数小数点后的指定位数

Python 浮点数指定小数位截断实现方案

核心实现(常规场景)

通过「放大对应倍数→取整→缩小回原倍数」的逻辑实现截断,如需固定位数补零可直接返回格式化字符串:

def truncate_float(f, n, return_str=True):
    multiplier = 10 ** n
    # 截断核心逻辑:乘10的n次方后取整丢弃小数位,再缩回去
    truncated_val = int(f * multiplier) / multiplier
    if return_str:
        # 格式化补末尾零
        return f"{truncated_val:.{n}f}"
    return truncated_val

效果测试

a = 9.43257
b = 32.8

print(truncate_float(a, 3)) # 输出 '9.432'
print(truncate_float(b, 4)) # 输出 '32.8000'
# 不需要字符串格式的话传return_str=False
print(truncate_float(a, 3, return_str=False)) # 输出 9.432

高精度场景实现(避免浮点数精度误差)

如果是金融、计量等对数值精度要求极高的场景,建议用decimal模块实现,规避原生浮点数的精度丢失问题:

from decimal import Decimal, ROUND_DOWN

def truncate_float_precise(f, n, return_str=True):
    d = Decimal(str(f))
    # 指定ROUND_DOWN模式直接截断,不做四舍五入
    truncated = d.quantize(Decimal(f'0.{"0"*n}'), rounding=ROUND_DOWN)
    if return_str:
        return str(truncated)
    return float(truncated)

常见方案踩坑说明

你之前用到的round()函数、f-string/format默认格式化,底层默认使用四舍五入的舍入策略,无法满足纯截断的需求,所以不适用该场景。


内容的提问来源于stack exchange,提问作者baronsec

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:36:05