它是怎么回事?
我需要生成一个带有大量小数的随机数,以便在高级计算中使用。
我试图使用此代码:
round(random.uniform(min_time, max_time), 1)
但它不适用于15以上的小数位。
如果我使用,例如:
round(random.uniform(0, 0.5), 100)
它返回0.586422176354875,但我需要一个返回100位小数的代码。
你能帮助我吗?
谢谢!
答案 0 :(得分:1)
第一个问题是如何创建一个包含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之间的数字。将其乘以或除以得到不同的范围。