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.

11
demandé sur Mark Dickinson 2009-01-13 17:26:49

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
26
répondu bobince 2016-02-23 18:17:20

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.

15
répondu Kiv 2009-01-13 14:44:36

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')
>>>
8
répondu Vinko Vrsalovic 2009-01-13 14:56:32

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 ?

2
répondu bruno desthuilliers 2009-01-13 16:04:14
decimal.Decimal(random.random() * MAX_VAL).quantize(decimal.Decimal('.01'))
2
répondu Colin 2012-09-03 15:12:42

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)
0
répondu Ivan Nikiforov 2018-02-26 13:48:00
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)
0
répondu Ridhesh Goti 2018-04-04 19:05:00