在特定范围内生成随机数

3
我该如何生成在区间 (0, 0.1] 内精确到小数点后两位的随机数?目前我的代码能够生成在区间 [0, 0.1] 内精确到小数点后两位的随机数:
radius = round(random.uniform(0, 0.1), 2)

不确定这里有什么问题。那里出了什么错? - Ali Gajani
2
@AliGajani 他们想要排除0.00。 - Nayuki
半径 = round(random.uniform(0.01, 0.1), 2) - Januka samaranyake
2
请注意,使用round()会产生偏差,因为0.01出现的可能性比0.02小。 - Nayuki
3个回答

8
也许解决问题最简单的方法是考虑整数,而不是浮点数。
你基本上想要像0.01、0.02、0.03等可能的随机数,一直到0.09、0.10。
首先,生成一个介于1到10之间(包括1和10)的整数,然后除以100.0得到一个浮点数。
以下是代码:
x = random.randint(1, 10)
y = x / 100.0

Documentation: random.randint(a, b)


非常感谢您的帮助。 - Hello
1
@你好,不用谢!下次无需感谢,只需点赞并接受答案即可。 - Nayuki

0
radius = round(random.uniform(0.005, 0.10499999999999), 2)
print(radius)

你还需要扩展采样值的范围,以确保选择边缘数字0.01和0.1的概率与所需范围内的任何其他数字相同。否则,它们将以其他数字的一半概率进行采样。我假设round函数向上舍入,即0.105最终会变成0.11而不是0.10。


-1

尝试从最大值中减去随机值,使用uniform函数时包括低值但不包括高值,这样你就可以得到从0max的值,不包括低值但包括高值:

radius = round(0.1-random.uniform(0, 0.1), 2)

这仍然会产生相同的分布,并且仍然会产生0.00。 - Nayuki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接