# Python - Fraction and mixed types

## Introduction

Some type mixing is allowed in expressions, though Fraction must sometimes be manually propagated to retain accuracy.

## Demo

```from fractions import Fraction
x = Fraction(1, 3)                    # Numerator, denominator
print( x )
print( x + 2 )                                  # Fraction + int -> Fraction
print( x + 2.0 )                                # Fraction + float -> float
print( x + (1./3) )                             # Fraction + float -> float
print( x + (4./3) )
print( x + Fraction(4, 3) )                     # Fraction + Fraction -> Fraction
#   w  w  w.  jav  a2  s .  c om
```

## Result

Although you can convert from floating point to fraction, in some cases there is an unavoidable precision loss when you do so.

When needed, you can simplify such results by limiting the maximum denominator value:

## Demo

```from fractions import Fraction
print( 4.0 / 3 )# from  w  w  w  . ja  v  a 2  s.c  om
print( (4.0 / 3).as_integer_ratio() ) # Precision loss from float

x = Fraction(1, 3)                    # Numerator, denominator

print( x )
a = x + Fraction(*(4.0 / 3).as_integer_ratio())
print( a )
print( 22123123136852479 / 13510712312312388 )      # 5 / 3 (or close to it!)
print( a.limit_denominator(10) )      # Simplify to closest fraction

```