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

使用xlwings UDF时Decimal/mpmath无法实现指定精度的问题

解决xlwings UDF高精度计算返回精度不足的问题

问题根源

你的两个函数没达到100位精度要求,核心原因有两个:

  1. 类型转换丢失精度:xlwings会自动把Decimal或mp.mpf类型转为Python的float(双精度浮点数),而float最多仅支持15-17位有效数字,直接截断了100位精度的数值。
  2. Excel显示限制:就算返回了高精度数值,Excel默认单元格格式只会显示有限位数,没法完整展示100位小数。

解决方案:以字符串形式返回结果

把计算结果转为字符串返回,既能避免类型转换丢精度,又能让Excel完整保留所有位数。修改后的函数如下:

使用Decimal库的函数

@xw.func
def fce_2(x, y):
    import decimal
    from decimal import Decimal
    decimal.getcontext().prec = 100
    z = Decimal(x)** Decimal(y)
    # 转字符串返回,保留全部100位精度
    return str(z)

使用mpmath库的函数

@xw.func
def fce_1(x, y):
    from mpmath import mp
    mp.dps = 100
    z = mp.mpf(x)** mp.mpf(y)
    # 转字符串返回,保留全部100位精度
    return str(z)

后续操作

函数返回的字符串导入Excel后,需将单元格格式设置为文本或自定义格式(比如设置小数位数为100位),才能完整显示所有100位小数。如果要基于该结果继续计算,建议还是在Python UDF中完成后续运算,避开Excel自身的精度限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:10:28