Как получить случайный decimal.Decimal
экземпляр? Похоже, что случайный модуль возвращает только float, которые являются pita для преобразования в Decimals.
Случайный десятичный в python
Ответ 1
Что такое "случайный десятичный знак"? Десятичные значения имеют произвольную точность, поэтому генерация числа с такой же случайностью, как вы можете хранить в десятичной системе, будет хранить всю память вашей машины.
Вы должны знать, сколько десятичных цифр точности вы хотите в своем случайном числе, и в этот момент легко просто захватить случайное целое число и разделить его. Например, если вы хотите две цифры над точкой и две цифры во фракции (см. randrange здесь):
decimal.Decimal(random.randrange(10000))/100
Ответ 2
Из справочной стандартной библиотеки:
Чтобы создать десятичный знак из float, сначала преобразуйте его в строку. Это служит явным напоминанием о деталях преобразования (включая ошибку представления).
>>> import random, decimal
>>> decimal.Decimal(str(random.random()))
Decimal('0.467474014342')
Это то, что вы имеете в виду? Мне это не нравится. Вы можете масштабировать его в любой диапазон и точность, которую вы хотите.
Ответ 3
Если вы знаете, сколько цифр вы хотите после запятой и перед ней, вы можете использовать:
>>> import decimal
>>> import random
>>> def gen_random_decimal(i,d):
... return decimal.Decimal('%d.%d' % (random.randint(0,i),random.randint(0,d)))
...
>>> gen_random_decimal(9999,999999) #4 digits before, 6 after
Decimal('4262.786648')
>>> gen_random_decimal(9999,999999)
Decimal('8623.79391')
>>> gen_random_decimal(9999,999999)
Decimal('7706.492775')
>>> gen_random_decimal(99999999999,999999999999) #11 digits before, 12 after
Decimal('35018421976.794013996282')
>>>
Ответ 4
Случайный модуль может предложить больше, чем "только возвращаемые поплавки", но в любом случае:
from random import random
from decimal import Decimal
randdecimal = lambda: Decimal("%f" % random.random())
Или я пропустил что-то очевидное в вашем вопросе?
Ответ 5
decimal.Decimal(random.random() * MAX_VAL).quantize(decimal.Decimal('.01'))
Ответ 6
Еще один способ сделать случайный десятичный знак.
import random
round(random.randint(1, 1000) * random.random(), 2)
В этом примере
- random.randint() генерирует случайное целое число в указанном диапазоне (включительно),
- random.random() генерирует случайное число с плавающей запятой в диапазоне (0.0, 1.0)
- Наконец, функция round() будет округлять результат умножения умножения вышеупомянутых значений (что-то вроде 254.71921934351644) до указанного числа после десятичной точки (в нашем случае мы получили бы 254.71)