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

Python中如何将小数截断保留为指定的小数位数

Python自定义调整小数位数实现方法

常用实现方案

1. 内置round()函数(普通场景首选)

这是最简洁的原生实现,直接传入原始数值和要保留的小数位数即可,默认采用四舍五入规则:

original = 1.512411
keep_digits = 2
result = round(original, keep_digits)
print(result) # 输出1.51

注意:受Python浮点数二进制存储机制影响,部分边缘值可能出现精度偏差,比如round(2.675, 2)实际输出2.67而非预期的2.68,对精度要求极高的场景不要用这个方法。

2. 字符串格式化(需要固定输出格式时用)

如果需要保证保留位数的输出格式(比如不足位数补0,如1.5保留2位显示为1.50),可以用f-string格式化,需要数值结果时再转回float即可:

original = 1.512411
keep_digits = 2
result_str = f"{original:.{keep_digits}f}"
result = float(result_str)
print(result) # 输出1.51

3. decimal模块(高精度场景首选)

涉及金融、计量类不能接受精度误差的场景,用标准库decimal做精确十进制运算,可以自定义舍入规则,完全规避浮点数存储带来的尾差问题:

from decimal import Decimal, ROUND_HALF_UP

original = Decimal("1.512411")
keep_digits = 2
# 构造精度模板,0.00对应保留2位,ROUND_HALF_UP为日常使用的四舍五入规则
precision_template = Decimal("1." + "0"*keep_digits)
result = original.quantize(precision_template, rounding=ROUND_HALF_UP)
print(float(result)) # 输出1.51

4. 直接截断(不需要四舍五入的场景)

如果不需要四舍五入,只想直接砍掉指定位数之后的小数(比如1.519保留2位要得到1.51),可以用乘幂取整再除回的方式实现:

original = 1.519
keep_digits = 2
scale = 10 ** keep_digits
result = int(original * scale) / scale
print(result) # 输出1.51

通用封装函数

可以把逻辑封装成可复用的函数,自定义传入保留位数、舍入规则即可:

def adjust_decimal(num: float, keep_digits: int, round_up: bool = True) -> float:
    """
    自定义调整小数位数
    :param num: 原始小数值
    :param keep_digits: 目标保留的小数位数
    :param round_up: 是否四舍五入,传False则直接截断多余位数
    """
    if round_up:
        return round(num, keep_digits)
    scale = 10 ** keep_digits
    return int(num * scale) / scale

# 调用示例
print(adjust_decimal(1.512411, 2)) # 输出1.51
print(adjust_decimal(1.519, 2, round_up=False)) # 输出1.51

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:36:19