ChatGPT解决这个技术问题 Extra ChatGPT

How to get a random number between a float range?

randrange(start, stop) only takes integer arguments. So how would I get a random number between two float values?

If you wanted numpy it's np.random.uniform(start, stop) or np.random.uniform(start, stop, samples) if you wanted multiple samples. Otherwise below answers are best.

Y
Yuri Stuken

Use random.uniform(a, b):

>>> random.uniform(1.5, 1.9)
1.8733202628557872

could this theoretically produce 1.5 and 1.9? or would it only ever produce 1.50~1 and 1.89~?
@Musixauce3000 Short Answer: Yes. Longer answer: If you look at the documentation it states Returns a random floating point number N such that a <= N <= b for a <= b and b <= N <= a for b < a In other words the output N can equal either input a and b. In this case 1.5 and 1.9.
Is there another way to do this without using the .uniform function, but instead with either .random or randrange?
@DerryckDX 1.5 + random.random() * (1.9 - 1.5) should do it, even though according to the specs this will never return exactly 1.9 (even in theory).
@Musixauce3000 it seems uniform(a, b) is implemented as a + (b-a) * random() and returns a random number in the range [a, b) or [a, b] depending on rounding github.com/python/cpython/blob/…
B
Baurin Leza

if you want generate a random float with N digits to the right of point, you can make this :

round(random.uniform(1,2), N)

the second argument is the number of decimals.


t
tzot

random.uniform(a, b) appears to be what your looking for. From the docs:

Return a random floating point number N such that a <= N <= b for a <= b and b <= N <= a for b < a.

See here.


D
DrosnickX

From my experience dealing with python, I can only say that the random function can help in generating random float numbers. Take the example below;

import random

# Random float number between range 15.5 to 80.5
print(random.uniform(15.5, 80.5))

# between 10 and 100
print(random.uniform(10, 100))
The random.uniform() function returns a random floating-point number between a given range in Python

The two sets of code generates random float numbers. You can try experimenting with it to give you what you want.


s
stwykd

Most commonly, you'd use:

import random
random.uniform(a, b) # range [a, b) or [a, b] depending on floating-point rounding

Python provides other distributions if you need.

If you have numpy imported already, you can used its equivalent:

import numpy as np
np.random.uniform(a, b) # range [a, b)

Again, if you need another distribution, numpy provides the same distributions as python, as well as many additional ones.


S
Sahim Salem

Use this to get random floating point number between range n to m:

import random
random.uniform(n,m)  

If you want to get a random float number up to x decimal places you can use this instead:

import random
round(random.uniform(n, m), x)