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
我尝试更改变量的类型,使它们成为 Decimal
s、int
egers 和 float
ing 点数,但它仍然会引发错误。可能是什么原因造成的?
您正在将上下文精度设置为浮点数:
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.
我对 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
我尝试更改变量的类型,使它们成为 Decimal
s、int
egers 和 float
ing 点数,但它仍然会引发错误。可能是什么原因造成的?
您正在将上下文精度设置为浮点数:
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.