如何在Python中定义保存1000位数字的小数类?

2024-02-11

我需要一个包含 1000 位十进制数字的类来计算一系列数据,例如 pi 数。花时间并不重要。我该如何定义__add__& ...执行此操作的函数? 例如我需要一个可以保存这个数字的值: 3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664 709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593344612847564823378678316527 12019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113

:))

这个号码使用decimal.Decimal显示如下:

from decimal import Decimal as dc
>>> x=dc(3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113)
>>> x
Decimal('3.141592653589793115997963468544185161590576171875')

但我需要一个包含所有数字的新类,我可以在其中使用加法、除法和...函数,例如 2+1 和 pi 数就是一个例子,确切地说,我不需要计算我想计算的 pi 数超大十进制数!


您必须设置一个包含 1000 位十进制数字的上下文:

context = decimal.Context(prec=1000)
decimal.setcontext(context)

从现在开始,计算将使用 1000 位精度。

Example:

>>> decimal.setcontext(decimal.Context(prec=1000))
>>> pi = decimal.Decimal('3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113')
>>> pi
Decimal('3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113')
>>> pi + 2
Decimal('5.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113')

注意:

  • 您必须使用字符串来初始化Decimal因为如果你使用float解释器必须首先截断它。 (而且我相信只有最新版本decimal接受一个float争论。在旧版本中你必须使用Decimal.from_float反而)。
  • 计算期间保留小数位。

您还可以通过以下方式在本地使用上下文localcontext上下文管理器:

context = decimal.Context(prec=1000)

with decimal.localcontext(context):
    # here decimal uses 1000 digits for computations
    pass

# here the default context is restored.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Python中定义保存1000位数字的小数类? 的相关文章

随机推荐