【问题标题】:How to get random Decimal number from range? [duplicate]如何从范围中获取随机十进制数? [复制]
【发布时间】:2023-03-15 05:08:01
【问题描述】:

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

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

>>> 1.89

随机可以做到这一点吗?我想保留 2 位小数。

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

返回>>> 0

【问题讨论】:

    标签: python python-2.7 random decimal


    【解决方案1】:

    你可以像这样使用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 在下面的 cmets 中提到了这一点。

    【讨论】:

    • @etanany 有趣的解决方案。谢谢
    • 不确定 OP 是否要包含范围的端点。如果他们这样做,则使用random.randrange(155, 390) 或使用randint(155, 389),这将包括两个端点。
    • @mhawke 你的意思是random.randrange(156, 388)?
    • "float" 来获得所需的输出会得到错误的输出,可能更常见 - 除非人们只想将数字的内部repr 视为数字。这就是它适用于示例的原因。在实际代码中,很可能只是将 Decimal 对象本身直接传递给格式化为字符串 - 用于屏幕输出或记录在文件中。
    • @jsbueno 我编辑了我的答案以包括这个,谢谢:)
    【解决方案2】:

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

    >>> 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
    

    【讨论】:

    • 这个问题是重复的,这个答案是从那个线程重复的:stackoverflow.com/questions/40972438/…
    • 这对 Python 3 来说很好,但是,OP 使用的是 Python 2,其中 / 是整数除法。结果不会如你所愿。也许在文件顶部添加一个from __future__ import division,或者除以一个浮点数:random.randint(155, 389)/100.0
    猜你喜欢
    • 2021-07-24
    • 2018-05-15
    • 2015-03-14
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 2012-10-30
    • 2021-06-12
    • 2020-06-02
    相关资源
    最近更新 更多