python中的随机Decimal

ash*_*ley 12 python random decimal

我如何获得随机decimal.Decimal实例?似乎随机模块只返回浮点数,这是一个转换为小数的皮塔饼.

bob*_*nce 28

什么是"随机小数"?小数具有任意精度,因此生成一个具有尽可能多的随机性的数字可以保存机器的整个内存.

你必须知道随机数中你想要多少个精度的十进制数字,此时只需抓取一个随机整数并除以它就很容易.例如,如果您想要点上方的两位数和小数中的两位数(请参阅此处的randrange):

decimal.Decimal(random.randrange(10000))/100
Run Code Online (Sandbox Code Playgroud)

  • 所以,你是说存在有限长度这一事实意味着结果不是随机的? (2认同)

Kiv*_*Kiv 16

标准库参考:

要从float创建Decimal,请先将其转换为字符串.这可以明确提醒转换的详细信息(包括表示错误).

>>> import random, decimal
>>> decimal.Decimal(str(random.random()))
Decimal('0.467474014342')
Run Code Online (Sandbox Code Playgroud)

你是这个意思吗?它对我来说似乎不是一个皮塔饼.您可以将其缩放到您想要的任何范围和精度.


Vin*_*vic 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')
>>>
Run Code Online (Sandbox Code Playgroud)