Уведомления

Группа в Telegram: @pythonsu

#1 Июль 18, 2012 13:19:21

svas
От:
Зарегистрирован: 2010-01-27
Сообщения: 239
Репутация: +  9  -
Профиль   Отправить e-mail  

decimal.InvalidOperation: quantize result has too many digits for current context

Объясните, пожалуйста, в чем проблема

import decimal
import random

def random_float(start, end):
return random.random()*(end-start)+start

def random_decimal(start, end, decimal_places=2):
d = str(random_float(start, end))
print d
print decimal.getcontext()
return decimal.Decimal(d).quantize(decimal.Decimal(10 ** (-decimal_places)))

print random_decimal(1000, 10000)
Вывод
2430.39449204
Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999999, Emax=999999999, capitals=1, flags=[], traps=[Overflow, DivisionByZero, InvalidOperation])
Traceback (most recent call last):
File "decimal_test.py", line 15, in <module>
print random_decimal(1000, 10000)
File "decimal_test.py", line 12, in random_decimal
return decimal.Decimal(d).quantize(decimal.Decimal(10 ** -2))
File "/usr/lib/python2.7/decimal.py", line 2464, in quantize
'quantize result has too many digits for current context')
File "/usr/lib/python2.7/decimal.py", line 3866, in _raise_error
raise error(explanation)
decimal.InvalidOperation: quantize result has too many digits for current context



Офлайн

#2 Июль 18, 2012 13:27:24

svas
От:
Зарегистрирован: 2010-01-27
Сообщения: 239
Репутация: +  9  -
Профиль   Отправить e-mail  

decimal.InvalidOperation: quantize result has too many digits for current context

Вот блин не внимательность, скобки не там поставил.

#Вместо
decimal.Decimal(10 ** (-decimal_places))
#Надо
decimal.Decimal(10)**(-decimal_places)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version