How to generate random number with a large number of decimals in Python?

How it's going?

I need to generate a random number with a large number of decimal to use in advanced calculation.

I've tried to use this code:

round(random.uniform(min_time, max_time), 1)

But it doesn't work for length of decimals above 15.

If I use, for e.g:

round(random.uniform(0, 0.5), 100)

It returns 0.586422176354875, but I need a code that returns a number with 100 decimals.

Can you help me?

Thanks!

Upvotes: 1

Views: 493

Answers (1)

zvone
zvone

Reputation: 19352

100 decimals

The first problem is how to create a number with 1000 decimals at all.

This won't do:

>>> 1.23456789012345678901234567890
1.2345678901234567

Those are floating point numbers which have limitations far from 100 decimals.

Luckily, in Python, there is the decimal built-in module which can help:

>>> from decimal import Decimal
>>> Decimal('1.2345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901')
Decimal('1.2345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901')

Decimal can have any precision you need and it won't introduce floating point errors, but it will be much slower.

random

Now you just have to create a string with 100 decmals and give it to Decimal.

This will create one random digit:

random.choice('0123456789')

This will create 100 random digits and concatenate them:

''.join(random.choice('0123456789') for i in range(100))

Now just create a Decimal:

Decimal('0.' + ''.join(random.choice('0123456789') for i in range(100)))

This creates a number between 0 and 1. Multiply it or divide to get a different range.

Upvotes: 1

Related Questions