Mantis Toboggan
Mantis Toboggan

Reputation: 7795

How to get a random number between a float range?

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

Upvotes: 705

Views: 854157

Answers (7)

rosa b.
rosa b.

Reputation: 2146

For completness sake: If you use numpy, you can also call the uniform method on an instance of random number generator (now the preferred way in numpy when dealing with random numbers).

import numpy as np

seed = 42
low = 0.12
high = 3.45

rng = np.random.default_rng(seed)
rng.uniform(low, high)

Upvotes: 1

Yuri Stuken
Yuri Stuken

Reputation: 13610

Use random.uniform(a, b):

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

Upvotes: 1042

Sahim Salem
Sahim Salem

Reputation: 119

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)

Upvotes: 2

DrosnickX
DrosnickX

Reputation: 455

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.

Upvotes: 17

stwykd
stwykd

Reputation: 2884

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.

Upvotes: 15

Baurin Leza
Baurin Leza

Reputation: 2094

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.

Upvotes: 151

garnertb
garnertb

Reputation: 9594

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.

Upvotes: 89

Related Questions