How to Convert sympy.Float to decimal.Decimal without trap?

问题描述 投票:0回答:2

在 sympy 中考虑以下表达式

(sp.Float(3000)**20000)**20000

或者,等价地,十进制,

(Decimal(3000)**20000)**20000

大约是

Decimal('7.72440390834123481997707091832E+1390848501')

但是不支持sympy.Float和decimal.Decimal之间的转换

Decimal((sp.Float(3000)**20000)**20000)
TypeError: conversion from Float to Decimal is not supported

如果在两者之间使用 float 函数,

Decimal(float( (sp.Float(3000)**20000)**20000))

该值将被错误地转换为

Decimal('Infinity')

因为数字大于浮动的限制。

如何在没有陷阱的情况下将 sympy.Float 转换为 decimal.Decimal?

python-3.x type-conversion decimal sympy
2个回答
1
投票

你可以通过str转换:

In [6]: from decimal import Decimal

In [7]: from sympy import Float

In [8]: f = (Float(3000)**20000)**20000

In [9]: Decimal(str(f))
Out[9]: Decimal('7.72440390834144E+1390848501')

0
投票

您可以为 Decimal 数字设置所需的精度,例如

>>> from decimal import *
>>> getcontext().prec = 100 # can't be bigger than MAX_PREC
>>> MAX_PREC
425000000

您的指数大于 MAX_PREC,因此除非您可以使 MAX_PREC 更大,否则您将无法用 Decimal 表示它。您是否考虑过存储数字的对数而不是数字本身?

© www.soinside.com 2019 - 2024. All rights reserved.