Decimal 模块中的 TypeError:需要整数参数,得到浮点数

TypeError in Decimal module: integer argument expected, got float

我对 Python 语言还很陌生,在我的第一个练习中,我想编写一个脚本来计算常量 e。 为此,我定义了一个函数 calc_temp,它有一个变量 temp,并且 temp 开始时等于 1。然后我将 temp 乘以 1 的商和一个名为 e_num 的变量,然后将 temp 添加到变量 approx_e。 然后,我使用了一个 while True: 循环来无限期地执行该功能。 代码如下所示:

#!/usr/bin/python
import math
from decimal import *
temp = 1
approx_e = Decimal(1)
e_num = 1
def calc_temp(e_num):
    global approx_e
    global temp
    len_ = math.log10(math.factorial(e_num))
    getcontext().prec = len_
    temp = Decimal(temp * 1 / e_num)
    e_num = e_num + 1
    approx_e = approx_e + temp
    return approx_e 
while True:
    calc_temp(e_num)

但是,当我执行脚本时,它会引发以下 TypeError:

Traceback (most recent call last):
  File "/home/dorian/Desktop/ever3.py", line 17, in <module>
    calc_temp(e_num)
   File "/home/dorian/Desktop/ever3.py", line 14, in calc_temp
    approx_e = approx_e + temp
  File "/usr/lib/python2.7/decimal.py", line 1209, in __add__
    ans = ans._fix(context)
  File "/usr/lib/python2.7/decimal.py", line 1692, in _fix
    changed = rounding_method(self, digits)
  File "/usr/lib/python2.7/decimal.py", line 1771, in _round_half_even
    if _exact_half(self._int, prec) and \
TypeError: integer argument expected, got float

我尝试更改变量的类型,使它们成为 Decimals、integers 和 floating 点数,但它仍然会引发错误。可能是什么原因造成的?

您正在将上下文精度设置为浮点数:

len_ = math.log10(math.factorial(e_num))
getcontext().prec = len_

设置为整数:

getcontext().prec = int(len_)

引用decimal.Context() documentation

The prec field is a positive integer that sets the precision for arithmetic operations in the context.