如何将SymPy浮点数转换为Python Decimal类型?
解决SymPy中EulerGamma值转Decimal类型的精度保留问题
错误原因
直接将SymPy返回的Float对象传入Decimal构造函数会报错,因为两者类型不支持直接转换。
正确转换方法
先将SymPy的浮点值转换为字符串,再用Decimal解析该字符串,即可完整保留所有精度:
from sympy import EulerGamma from decimal import Decimal as D import decimal # 设置足够高的精度,确保能容纳所有位数 decimal.getcontext().prec = 100 # 先转字符串再构造Decimal gamma_decimal = D(str(EulerGamma.n(60))) print(gamma_decimal)
说明
- SymPy的
EulerGamma.n(60)返回的Float对象,其字符串表示会完整输出所有指定精度的位数,不会丢失信息。 - 通过
str()转换后,Decimal可以准确解析这个字符串,得到和原SymPy浮点值完全一致的高精度Decimal对象。
内容的提问来源于stack exchange,提问作者Simd
相关产品推荐
相关产品推荐

