如何獲得一個隨機的decimal.Decimal
實例?看起來,隨機模塊只返回一個皮塔轉換爲小數的浮點數。python中的隨機十進制
10
A
回答
24
什麼是「隨機小數」?小數具有任意的精確度,因此生成一個具有與Decimal一樣多的隨機數的數字將需要存儲機器的整個內存。
您必須知道您的隨機數中需要多少個精確的小數位數,此時只需抓取一個隨機整數並將其分開即可。例如,如果你希望兩個數字的點上方,兩個數字的部分(參見randrange here):
decimal.Decimal(random.randrange(10000))/100
15
要從浮創建一個小數,先將其轉換爲字符串。這充當了轉換細節的明確提示(包括表示錯誤)。
>>> 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')
>>>
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)
- 最後,round()函數將四捨五入上述乘積的結果(小到254.71921934351644)到小數點後的指定數字(在我們的情況下,我們得到254.71)
相關問題
- 1. Excel隨機化十進制數
- 2. 安全隨機十六進制數字
- 3. python中的十六進制
- 4. 將十六進制轉換爲python中的十進制
- 5. Python十進制modf
- 6. Python十六進制
- 7. 在C中生成一個隨機十進制數
- 8. 如何在Swift中生成隨機長十六進制?
- 9. 在Python中將十六進制值轉換爲十進制
- 10. 如何在Python中將十六進制轉換爲十進制?
- 11. 在JS中生成隨機生成的十六進制顏色的免費十六進制顏色?
- 12. Python的十進制給出
- 13. 隨機生成的十六進制顏色的樹枝
- 14. 用於大數字的十進制到十六進制的Python
- 15. 從c的隨機十六進制答案
- 16. Java隨機生成兩位十進制格式的價格
- 17. 生成隨機的兩位十六進制值
- 18. 紅寶石,生成一個隨機的十六進制顏色
- 19. 刪除尾隨零的十進制
- 20. Python二進制到多十六進制
- 21. Python中的十進制精度Scipy lfilter?
- 22. Python中的十六進制掩碼
- 23. Str到Python中的十六進制
- 24. Python中的十進制子類
- 25. Python中十六進制值的單詞
- 26. Python中十進制時間的時間
- 27. Python 2.5 time.time()十進制
- 28. Python十六進制比較
- 29. 直方圖python十進制
- 30. python十進制精度
如果這裏很重要:這個數字的小數部分不是一致隨機的,由於刪除了前導零。你無法獲得'2.0something'。 – bobince 2009-01-13 15:00:44
我也考慮過這個問題,但以(4,6)作爲參數而不是(9999,999999),然後在函數體中使用10 ** 4 - 1,10 ** 6 - 1會更簡單。 – Kiv 2009-01-13 15:06:28
我同意這兩個意見:-) – 2009-01-13 15:07:29