Question

Comment puis-je obtenir un décimal.Decimal instance? Il semble que le module random retourne uniquement les floats qui sont un pita à convertir en décimales.

Était-ce utile?

La solution

Qu'est-ce qu'une "décimale aléatoire"? Les décimales ont une précision arbitraire. Par conséquent, générer un nombre aussi aléatoire que possible dans un nombre décimal prendrait toute la mémoire de votre machine à stocker.

Vous devez savoir combien de chiffres décimaux de précision vous voulez dans votre nombre aléatoire, à quel point il est facile de simplement saisir un entier aléatoire et de le diviser. Par exemple, si vous voulez deux chiffres au-dessus du point et deux chiffres dans la fraction (voir randrange here ):

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

Autres conseils

Dans la référence de bibliothèque standard :

Pour créer un nombre décimal à partir d'un nombre à virgule flottante, convertissez-le d'abord en chaîne. Cela sert de rappel explicite des détails de la conversion (y compris une erreur de représentation).

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

Est-ce ce que vous voulez dire? Cela ne me semble pas un pita. Vous pouvez l’adapter à la plage et à la précision souhaitées.

Si vous savez combien de chiffres vous voulez après et avant la virgule, vous pouvez utiliser:

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

Le module random a plus à offrir que "seuls les flottants", mais en tout cas:

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

Ou ai-je oublié quelque chose d'évident dans votre question?

decimal.Decimal(random.random() * MAX_VAL).quantize(decimal.Decimal('.01'))

Encore une autre façon de créer une décimale aléatoire.

import random
round(random.randint(1, 1000) * random.random(), 2)

Sur cet exemple,

  • random.randint () génère un entier aléatoire dans la plage spécifiée (inclusivement),
  • random.random () génère un nombre à virgule flottante aléatoire dans la plage (0.0, 1.0)
  • Enfin, la fonction round () arrondira le résultat de la multiplication de la multiplication susmentionnée (quelque chose de long comme 254.71921934351644) au nombre spécifié après le point décimal (dans notre cas, nous aurions 254.71).
import random
y = eval(input("Enter the value of y for the range of random number : "))
x = round(y*random.random(),2)  #only for 2 round off 
print(x)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top