首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从范围中获取随机十进制数?

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

Stack Overflow用户
提问于 2016-12-05 18:47:34
回答 2查看 46.3K关注 0票数 13

我正在寻找一种方法,如何在一定范围内生成随机Decimal数。例如:

代码语言:javascript
复制
>>> random.choice(range(Decimal(1.55,3.89)))

>>> 1.89

有没有可能用random做到这一点?我想保留两位小数。

代码语言:javascript
复制
random.choice(range(Decimal(1.55,3.89))) 

返回>>> 0

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-05 18:51:23

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

代码语言:javascript
复制
import random
import decimal

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

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

代码语言:javascript
复制
>>> float(decimal.Decimal(random.randrange(155, 389))/100)
3.14
>>> float(decimal.Decimal(random.randrange(155, 389))/100)
1.91

正如@jsbueno在注释中提到的,您可以在格式化字符串中使用生成的数字,而无需将其转换为浮点数:

代码语言:javascript
复制
>>> '{}'.format(decimal.Decimal(random.randrange(155, 389))/100)
'3.85'

您可能只需要使用如下所示的float()

代码语言:javascript
复制
>>> 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在下面的评论中提到了这一点。

票数 17
EN

Stack Overflow用户

发布于 2016-12-05 19:07:22

您可以生成一个范围为100倍的整数,然后除以100。这将节省导入Decimal,而且您不必像处理浮点数那样减少有效数字。

代码语言:javascript
复制
>>> import random

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

或者输出更多的值:

代码语言:javascript
复制
>>> 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
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40972438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档