décimale aléatoire en python
Comment puis-je obtenir un aléatoire decimal.Decimal
exemple? Il semble que le module random ne renvoie que les flotteurs qui sont une pita à convertir en décimales.
7 réponses
Qu'est-ce que "une décimale aléatoire"? Les décimales ont une précision arbitraire, donc générer un nombre avec autant d'aléatoire que vous pouvez tenir dans une décimale prendrait toute la mémoire de votre machine à stocker.
Vous devez savoir combien de décimales de précision que vous voulez dans votre nombre aléatoire, à quel point il est facile de saisir un entier aléatoire et de les diviser. Par exemple, si vous voulez deux chiffres au-dessus du point et de deux chiffres dans la fraction (voir randrange ici):
decimal.Decimal(random.randrange(10000))/100
référence de bibliothèque standard:
pour créer une décimale à partir d'un flotteur, convertissez-la d'abord en chaîne. Ceci Sert de rappel explicite des détails de la conversion (y compris l'erreur de représentation).
>>> import random, decimal
>>> decimal.Decimal(str(random.random()))
Decimal('0.467474014342')
Est-ce que tu veux dire? Ça ne ressemble pas à une pita pour moi. Vous pouvez l'adapter à la portée et à la précision que vous voulez.
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 "ne revenant à la flotte", mais de toute façon:
from random import random
from decimal import Decimal
randdecimal = lambda: Decimal("%f" % random.random())
ou Ai-je manqué quelque chose d'évident dans votre question ?
decimal.Decimal(random.random() * MAX_VAL).quantize(decimal.Decimal('.01'))
Encore une autre façon de faire un décimal aléatoire.
import random
round(random.randint(1, 1000) * random.random(), 2)
sur cet exemple,
- aléatoire.randint () génère des nombres entiers aléatoires dans la plage spécifiée (inclusivement),
- aléatoire.random () génère un nombre aléatoire de points flottants dans l'intervalle (0,0, 1,0)
- Enfin, round () fonction arrondira le résultat de multiplication des valeurs susmentionnées multiplication (quelque chose de long comme 254.71921934351644) au nombre spécifié après le point décimal (dans notre cas nous obtiendrions 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)