## 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

## Result

## Related Topic