7

我想Decimal在 Python 中计算功率,例如:

from decimal import Decimal
Decimal.power(2,2)

以上应该返回我为Decimal('2)

如何计算功率Decimals

编辑:这就是我所做的

y = Decimal('10')**(x-deci_x+Decimal(str(n))-Decimal('1'))

x,deci_x 是十进制类型

但上面的表达式抛出错误:

decimal.InvalidOperation: x ** (non-integer)

堆栈跟踪:

Traceback (most recent call last):
  File "ha.py", line 28, in ?
    first_k_1=first_k(2,n-1,k)
  File "ha.py", line 18, in first_k
    y = Decimal('10')**(x-deci_x+Decimal(str(n))-Decimal('1'))
  File "/usr/lib64/python2.4/decimal.py", line 1709, in __pow__
    return context._raise_error(InvalidOperation, 'x ** (non-integer)')
  File "/usr/lib64/python2.4/decimal.py", line 2267, in _raise_error
    raise error, explanation
4

4 回答 4

10

您可以使用以下方法计算功率**

2**3  # yields 8

a = Decimal(2)
a**2  # yields Decimal(4)

在您的更新之后,对我来说似乎没问题:

>>> x = Decimal(2)
>>> deci_x = Decimal(1)
>>> n=4
>>> y = Decimal('10')**(x-deci_x+Decimal(str(n))-Decimal('1'))
>>> y
Decimal('10000')
于 2013-07-10T10:02:28.413 回答
4

您可以将幂运算符**与 Decimal 一起使用...

print(Decimal(2)**Decimal(2)) # 4

编辑,跟进您的问题

您不需要将字符串解析为 Decimal()...

from decimal import Decimal
x, deci_x, n = Decimal(2), Decimal(3), 4
y = Decimal(10)**(x-deci_x+Decimal(n)-Decimal(1))
print(y) # 100
于 2013-07-10T10:04:34.073 回答
1

在 Python >= 3.4 asDecimal有一个power函数.

>>> decimal.power(Decimal('2'), Decimal('2.5'))

或者干脆使用math模块;

from math import pow
pow(2, 2)

使用小数

>>> pow(Decimal('2'), Decimal('2'))

和非整数小数也可以

>>> pow(Decimal('2'), Decimal('2.5'))
于 2013-07-10T10:03:04.583 回答
0

Python 2.4.6 不支持小数的非整数幂。从__pow__方法中decimal.py

def __pow__(self, n, modulo = None, context=None):
    #[snip]
    if not n._isinteger():
        return context._raise_error(InvalidOperation, 'x ** (non-integer)')

ifx-deci_x+Decimal(str(n))-Decimal('1')始终是整数,在将其用作指数之前将其转换为整数类型。如果您需要指数为非整数,请考虑升级到更新版本的 Python。

于 2013-07-10T12:07:00.270 回答