Decimal模块中的TypeError:期望的整数参数,得到浮点数

时间:2015-01-01 23:08:21

标签: python python-2.7 ubuntu-14.04

我对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点数,但它仍然会引发错误。可能导致什么呢?

1 个答案:

答案 0 :(得分:1)

您正在将上下文精度设置为float:

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

将其设置为整数:

getcontext().prec = int(len_)

引用decimal.Context() documentation

  

prec 字段是一个正整数,用于设置上下文中算术运算的精度。