Найти - Пользователи
Полная версия: decimal.InvalidOperation: quantize result has too many digits for current context
Начало » Python для новичков » decimal.InvalidOperation: quantize result has too many digits for current context
1
svas
Объясните, пожалуйста, в чем проблема
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
svas
Вот блин не внимательность, скобки не там поставил.
#Вместо
decimal.Decimal(10 ** (-decimal_places))
#Надо
decimal.Decimal(10)**(-decimal_places)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB