如何从范围中获取随机的十进制数?

时间:2016-12-05 10:47:34

标签: python python-2.7 random decimal

我正在寻找一种如何在某个范围内生成随机Decimal数字的方法。例如 -

>>> random.choice(range(Decimal(1.55,3.89)))

>>> 1.89

是否有可能随机做到这一点?我想保留2个小数位。

random.choice(range(Decimal(1.55,3.89))) 

返回>>> 0

2 个答案:

答案 0 :(得分:7)

您可以像这样使用random.randrange()

import random
import decimal

decimal.Decimal(random.randrange(155, 389))/100

然后使用float()获得所需的输出:

>>> float(decimal.Decimal(random.randrange(155, 389))/100)
3.14
>>> float(decimal.Decimal(random.randrange(155, 389))/100)
1.91

正如@jsbueno在评论中所提到的,您可以在格式化字符串中使用生成的数字而不将它们转换为浮点数:

>>> '{}'.format(decimal.Decimal(random.randrange(155, 389))/100)
'3.85'

您可能需要使用float(),如下所示:

>>> float(random.randrange(155, 389))/100
2.38
>>> float(random.randrange(155, 389))/100
3.72

注意:

random.randrange(155, 389)中,155包含在范围内,但389不包括在内,如果您想包含389,则应使用random.randrange(155, 390)。 @mhawke在下面的评论中提到了这一点。

答案 1 :(得分:4)

您可以生成一个范围100x范围内的整数,然后除以100.将保存导入十进制,并且您不必像浮点数那样处理有效数字的减少。

>>> import random

>>> random_decimal = random.randint(155, 389)/100
>>> print(random_decimal)
2.12

或输出更多值:

>>> for i in range(10):
>>>    print(random.randint(155, 389)/100)
2.69
3.84
3.53
3.87
1.56
2.12
2.7
2.4
3.31
3.28