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

Python中Decimal高效格式化方法及性能优化开关排查

Python中高效格式化Decimal的方法与优化检查

为消除浮点舍入误差,我将程序中的float类型替换为Decimal类型,虽预期会有一定性能下降,但仅格式化Decimal并打印日志就带来了远超预期的性能损耗。以下是通过cProfile得到的二者性能对比,想请教两个问题:

  • Python中是否存在更高效的Decimal格式化方法?
  • 怀疑本地设备上Decimal的某些优化未开启,该如何检查?

性能测试对比

float格式化测试

测试代码:

from cProfile import Profile

a_float = 1234567890.12345

def format_float(value: float) -> str:
    if value is None:
        return ''
    result = f"{value:+,.6f}"
    return result

def test_float():
    for i in range(1000000):
        b = format_float(a_float)

p = Profile()
p.runcall(test_float)
p.print_stats()

测试结果:1000002次函数调用,耗时0.839秒

Decimal格式化测试

测试代码:

from decimal import Decimal
from cProfile import Profile

a_decimal = Decimal('1234567890.12345')

def format_decimal(value: Decimal) -> str:
    if value is None:
        return ''
    result = f"{value:+,.6f}"
    return result

def test_decimal():
    for i in range(1000000):
        b = format_decimal(a_decimal)

p = Profile()
p.runcall(test_decimal)
p.print_stats()

测试结果:55000002次函数调用,耗时27.739秒

后续排查发现

评论区其他用户测试无此性能问题:

  • float的调用栈简洁,末尾包含{method 'disable' of '_lsprof.Profiler' objects},疑似存在底层优化
  • 我的Decimal调用栈包含大量函数调用,但其他用户(如Suramuthu R)的Decimal测试调用栈与我的float测试类似,同样有上述优化相关行

推测本地设备上Decimal的某些优化未启用,请教如何检查和开启?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 13:13:37