случайный десятичный в python

Как получить случайный decimal.Decimal? Похоже, что случайный модуль возвращает только float, которые являются pita для преобразования в Decimals.

  • Python: функция диапазона для десятичных чисел
  • Что означает знак плюса перед переменной в Python?
  • Как распечатать поплавок с разделителями тысяч?
  • Создание такой же последовательности случайных чисел в Python, NumPy и R
  • выбор на основе процентного взвешивания
  • Что означает знак плюса перед переменной в Python?
  • Как распечатать поплавок с разделителями тысяч?
  • Лучший способ генерации случайных имен файлов в Python
  • Генерировать случайные числа с заданным (численным) распределением
  • 5 Solutions collect form web for “случайный десятичный в python”

    Что такое «случайный десятичный знак»? Десятичные значения имеют произвольную точность, поэтому генерация числа с такой же случайностью, как вы можете хранить в десятичной системе, будет хранить всю память вашей машины для хранения.

    Вы должны знать, сколько десятичных цифр точности вы хотите в своем случайном числе, и в этот момент легко просто захватить случайное целое число и разделить его. Например, если вы хотите две цифры над точкой и две цифры во фракции (см. Randrange здесь ):

    decimal.Decimal(random.randrange(10000))/100 

    Из стандартной ссылки на библиотеку :

    Чтобы создать Decimal из float, сначала преобразуйте его в строку. Это служит явным напоминанием о деталях преобразования (включая ошибку представления).

     >>> import random, decimal >>> decimal.Decimal(str(random.random())) Decimal('0.467474014342') 

    Это то, что вы имеете в виду? Мне это не нравится. Вы можете масштабировать его в любой диапазон и точность, которые вы хотите.

    Если вы знаете, сколько цифр вы хотите после запятой и перед ней, вы можете использовать:

     >>> 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') >>> 

    Случайный модуль может предложить больше, чем «только возвращаемые поплавки», но в любом случае:

     from random import random from decimal import Decimal randdecimal = lambda: Decimal("%f" % random.random()) 

    Или я пропустил что-то очевидное в вашем вопросе?

     decimal.Decimal(random.random() * MAX_VAL).quantize(decimal.Decimal('.01')) 
    Python - лучший язык программирования в мире.