2009-01-13 16 views
10

मैं यादृच्छिक decimal.Decimal उदाहरण कैसे प्राप्त करूं? ऐसा प्रतीत होता है कि यादृच्छिक मॉड्यूल केवल फ्लोट लौटाता है जो दशमलव के रूप में परिवर्तित करने के लिए एक पिटा होता है।पायथन में यादृच्छिक दशमलव

उत्तर

24

"एक यादृच्छिक दशमलव" क्या है? दशमलव के मनमाने ढंग से परिशुद्धता होती है, इसलिए एक संख्या को उतना ही यादृच्छिकता के साथ उत्पन्न करना जितना आप एक दशमलव में रख सकते हैं, आपकी मशीन की पूरी याददाश्त को स्टोर करने के लिए ले जाएगा।

आपको यह जानना होगा कि आप अपने यादृच्छिक संख्या में कितने सटीक परिशुद्धता चाहते हैं, जिस बिंदु पर बस एक यादृच्छिक पूर्णांक पकड़ना और इसे विभाजित करना आसान है। उदाहरण के लिए आप अंक ऊपर दो अंक और अंश में दो अंक चाहते हैं (randrange here देखें):

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

में उम्मीद कर सकते हैं, तो आप सुझाव दे रहे हैं कि तथ्य यह है कि एक सीमित लंबाई है मतलब है कि परिणाम यादृच्छिक नहीं हैं? – monokrome

15
standard library reference से

:

एक नाव से एक दशमलव बनाने के लिए पहले यह एक स्ट्रिंग के लिए कनवर्ट करें। यह रूपांतरण के विवरण (प्रतिनिधित्व त्रुटि सहित) के एक स्पष्ट अनुस्मारक के रूप में कार्य करता है।

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

क्या इसका मतलब है? यह मेरे लिए एक पिटा की तरह प्रतीत नहीं होता है। आप इसे जो भी सीमा और परिशुद्धता चाहते हैं उसे स्केल कर सकते हैं।

8

क्या आप जानते हैं कि कितने अंक आप के बाद और अल्पविराम से पहले चाहते हैं, आप उपयोग कर सकते हैं:

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

यदि यह यहां मायने रखता है: इस तरह का नंबर का आंशिक हिस्सा समान रूप से यादृच्छिक नहीं होगा, अग्रणी शून्यों को हटाने के कारण। आप इसमें से '2.0something' नहीं प्राप्त कर सकते हैं। – bobince

+0

मैंने इसे भी माना, लेकिन यह (99, 99 99 99) के बजाय तर्कों के रूप में (4, 6) लेने के लिए बेहतर होगा और फिर फ़ंक्शन बॉडी में केवल 10 ** 4 - 1, 10 ** 6 - 1 का उपयोग करें। – Kiv

+0

मैं दोनों टिप्पणियों से सहमत हूं :-) –

2

यादृच्छिक मॉड्यूल से अधिक "केवल लौटने तैरता" के लिए प्रस्ताव दिया है, लेकिन वैसे भी:

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

या क्या मुझे आपके प्रश्न में कुछ याद आया?

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

फिर भी यादृच्छिक दशमलव बनाने का एक और तरीका।

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

इस उदाहरण पर,

  • random.randint() निर्दिष्ट श्रेणी (सम्मिलित) में यादृच्छिक पूर्णांक जेनरेट,
  • random.random() चल में बिंदु संख्या यादृच्छिक उत्पन्न करता है रेंज (0.0, 1.0)
  • अंत में, राउंड() फ़ंक्शन उपरोक्त के गुणात्मक परिणाम के दौर में होगा दशमलव बिंदु के बाद निर्दिष्ट मान पर (254.71921934351644 की तरह कुछ लंबा) (हमारे मामले में हमें 254.71 मिलेंगे)
+1

ओपी एक 'दशमलव। डेसीमल' उदाहरण चाहता है। आपका कोड 'फ्लोट' बनाता है। –

संबंधित मुद्दे