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

如何避免使用print函数打印浮点数时自动执行四舍五入操作?

实现Python数字的截断(而非四舍五入)格式化

嘿,这个需求我之前做财务计算的时候也碰到过!默认的str.format()会自动四舍五入,要得到纯截断的结果,给你分享几个实用的方法:

方法1:数学运算截断(简单高效)

利用乘法+截断整数部分+除法的思路,直接对数值进行操作,适合大多数常规场景:

from math import sqrt, trunc
x = sqrt(19)  # x = 4.358898943540674
# 乘以10^4(对应4位小数),截断整数部分后再除以10^4
truncated_num = trunc(x * 10000) / 10000
print("{:.4f}".format(truncated_num))  # 输出 4.3588

注意:trunc()函数会直接砍掉小数部分,不管正负。如果需要处理负数,这个方法也能正常工作(比如trunc(-4.35889)会得到-4)。

方法2:字符串截取法(直观易懂)

把数值转成字符串后,直接截取到小数点后第4位,适合需要直观控制输出格式的场景:

from math import sqrt
x = sqrt(19)
x_str = str(x)
if '.' in x_str:
    # 拆分整数和小数部分
    int_part, dec_part = x_str.split('.')
    # 拼接成截断后的字符串
    result = f"{int_part}.{dec_part[:4]}"
else:
    result = x_str
print(result)  # 输出 4.3588

小提醒:如果数值大到触发科学计数法(比如1e10),这个方法需要额外处理,所以更适合常规范围的数值。

方法3:Decimal模块(严谨专业)

如果是对精度要求极高的场景(比如金融、计量计算),推荐用Python内置的decimal模块,它支持多种舍入模式:

from decimal import Decimal, ROUND_DOWN
from math import sqrt

x = sqrt(19)
# 先把浮点数转成Decimal(用字符串转换避免精度损失)
decimal_x = Decimal(str(x))
# 设置截断模式为ROUND_DOWN,保留4位小数
truncated_decimal = decimal_x.quantize(Decimal('0.0000'), rounding=ROUND_DOWN)
print(truncated_decimal)  # 输出 4.3588

这个方法的优势是可以精确控制舍入规则,还能避免浮点数本身的精度误差问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:32:31