gpt4 book ai didi

Python decimal 模块不喜欢从 1 开始的任何数字

转载 作者:太空狗 更新时间:2023-10-30 01:54:48 26 4
gpt4 key购买 nike

知道为什么 Python 的 decimal 模块不喜欢 1 或更大但 0.9 和更小的数字吗?

>>> import decimal
>>> max_digits = 5
>>> decimal_places = 5
>>> context = decimal.getcontext().copy()
>>> context.prec = max_digits

1本身的位数太多:

>>> value = decimal.Decimal('1')
>>> '%s' % str(value.quantize(decimal.Decimal(".1") ** decimal_places, context=context))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/decimal.py", line 2470, in quantize
'quantize result has too many digits for current context')
File "/usr/lib/python2.7/decimal.py", line 3872, in _raise_error
raise error(explanation)
decimal.InvalidOperation: quantize result has too many digits for current context

但是任何低于 1 的值都可以:

>>> value = decimal.Decimal('0.9')
>>> '%s' % str(value.quantize(decimal.Decimal(".1") ** decimal_places, context=context))
'0.90000'

有人愿意解释一下吗?

最佳答案

那是因为你将context.prec的最大精度设置为5位,同时你也将decimal_places设置为小数点后5位。将值设为 1 及以上将为您提供 6 位精度(有效数字):

1.00000
^ ^^^^^

这是 1 加上小数点后 5 位。这就是它提示的原因,说“结果对于当前上下文来说有太多数字”。 注意:看,错误消息实际上已经解释过了! =D

1以下的数,精确到5位,因为小数点前的部分不重要。

0.90000
^^^^^

您不需要设置context.prec,或者将其设置为更大的数字。为什么您首先要设置上下文?

max_digits 设置为 6 对我有用。

关于Python decimal 模块不喜欢从 1 开始的任何数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19423753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com