Home > database >  Python float with periodic decimals
Python float with periodic decimals

Time:03-29

Is there a way to take into account the periodic decimals in my function, for example:

So instead of just having a function y * 0.44 or y * 0.55 the program would use as many decimals as possible: y * 0.44444444 or y * 0.55555555 in its calculations.

One way I think would be by looping through the decimals and adding .0 as many times as possible. However, is there a leaner way?

CodePudding user response:

You could try defining the repeating values with fractional notation

point4=4/9   #0.4444444444...
point5=5/9    #0.5555555555...

y * point4
y * point5

To generalize to any repeating number, divide your number "n" with another number where every digit of "n" is replaced by 9

ex. 26/99 -> 0.26262626...

ex. 10203/99999 -> 0.102031020310203...

CodePudding user response:

This is a misunderstanding of how floats work. They have a limited size (usually 32 or 64 bits) and precision (they store a number using an exponent and a binary expansion).

So if you want to represent a number with infinite precision it is impossible with floats. You probably need to use a symbolic representation instead.

Even if you want to use the most decimal places possible, it is still a problem, because floats work in binary and not decimal, so there is no equal number of precise decimal places for every float. (for more information about floats see Wikipedia)

The best alternative I can think of, if you only need rational numbers, could be using the fractions module.

In [1]: from fractions import Fraction

In [2]: Fraction(3, 4) * Fraction(5, 3)
Out[2]: Fraction(5, 4)

If you need more advanced stuff, you could try sympy.

CodePudding user response:

One comment solved it:

0.44 --> 44/99 --> 0.44444444

0.58 --> 58/99 --> 0.58585858

0.4 --> 4/9 --> 0.44444

0.567 --> 567/999 --> 0.567567567

  • Related