如何在Python中生成具有大量小数的随机数?

时间:2016-10-08 22:36:43

标签: python random numbers

它是怎么回事?

我需要生成一个带有大量小数的随机数,以便在高级计算中使用。

我试图使用此代码:

round(random.uniform(min_time, max_time), 1)

但它不适用于15以上的小数位。

如果我使用,例如:

round(random.uniform(0, 0.5), 100)

它返回0.586422176354875,但我需要一个返回100位小数的代码。

你能帮助我吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

100位小数

第一个问题是如何创建一个包含1000个小数的数字。

这不会:

>>> 1.23456789012345678901234567890
1.2345678901234567

这些浮点数的限制远远超过100位小数。

幸运的是,在Python中,decimal built-in module可以提供帮助:

>>> from decimal import Decimal
>>> Decimal('1.2345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901')
Decimal('1.2345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901')

十进制可以具有您需要的任何精度,并且不会引入floating point errors,但速度会慢得多。

随机

现在你只需要创建一个包含100个decmals的字符串并将其提供给Decimal

这将创建一个随机数字:

random.choice('0123456789')

这将创建100个随机数字并将它们连接起来:

''.join(random.choice('0123456789') for i in range(100))

现在只需创建一个Decimal

Decimal('0.' + ''.join(random.choice('0123456789') for i in range(100)))

这将创建一个介于0和1之间的数字。将其乘以或除以得到不同的范围。