Python Rational numbers (fractions)

Any number which can be expressed as a quotient or fraction in the form of p/q is called a rational number. The fractions module of Python's standard library provides functionality for rational number arithmetic with exact precision, avoiding floating-point rounding errors.

Creating Fraction Objects

The fractions module defines a Fraction class that can be constructed in various ways ?

Using Numerator and Denominator

from fractions import Fraction

n1 = Fraction(2, 5)
print(n1)

n2 = Fraction(6, 15)  # Automatically reduced to lowest terms
print(n2)

n3 = Fraction(10, 1)
print(n3)

n4 = Fraction(10)  # Denominator defaults to 1
print(n4)
2/5
2/5
10/1
10/1

Note that the numerator and denominator are automatically reduced to their lowest terms by dividing by their greatest common divisor.

Using String Representation

The Fraction constructor accepts string parameters containing valid numeric representations ?

from fractions import Fraction

n1 = Fraction('5')
print(n1)

n2 = Fraction('4/7')
print(n2)

n3 = Fraction('0.25')
print(n3)

n4 = Fraction('1.23E4')  # Scientific notation
print(n4)
5/1
4/7
1/4
12300/1

Using Float and Decimal

While floats can be used, they may produce unexpected results due to binary representation. Decimal objects provide exact conversion ?

from fractions import Fraction
from decimal import Decimal

n1 = Fraction(2.1)  # Float may not be exact
print(n1)

n2 = Fraction(Decimal('2.1'))  # Decimal provides exact conversion
print(n2)
4728779608739021/2251799813685248
21/10

Arithmetic Operations

All standard arithmetic operations work with Fraction objects and return exact results ?

from fractions import Fraction

n1 = Fraction(2, 3)
n2 = Fraction(1, 2)

print("Addition:", n1 + n2)
print("Subtraction:", n1 - n2)
print("Multiplication:", n1 * n2)
print("Division:", n1 / n2)
Addition: 7/6
Subtraction: 1/6
Multiplication: 1/3
Division: 4/3
Fraction Addition Example 2 3 + 1 2 = 4 6 + 3 6 = 7 6 Common denominator: LCM(3,2) = 6 2/3 = 4/6, 1/2 = 3/6, so 4/6 + 3/6 = 7/6

Accessing Numerator and Denominator

You can access the numerator and denominator attributes separately ?

from fractions import Fraction

n1 = Fraction(2, 3)
print("Numerator:", n1.numerator)
print("Denominator:", n1.denominator)
Numerator: 2
Denominator: 3

Useful Methods

Floor and Ceiling Values

from fractions import Fraction
import math

n1 = Fraction(355, 113)
print("Fraction:", n1)
print("Float value:", float(n1))
print("Floor value:", math.floor(n1))
print("Ceiling value:", math.ceil(n1))
Fraction: 355/113
Float value: 3.1415929203539825
Floor value: 3
Ceiling value: 4

Limiting Denominator

The limit_denominator() method returns the closest fraction with a denominator not exceeding the specified value ?

from fractions import Fraction

# Approximate pi with different denominator limits
pi_approx = Fraction('3.14159')
print("Original:", pi_approx)
print("Max denom 10:", pi_approx.limit_denominator(10))
print("Max denom 100:", pi_approx.limit_denominator(100))
print("Max denom 1000:", pi_approx.limit_denominator(1000))
Original: 314159/100000
Max denom 10: 22/7
Max denom 100: 22/7
Max denom 1000: 355/113

Conclusion

The fractions module provides exact rational number arithmetic, avoiding floating-point precision errors. Use Fraction for calculations requiring precise decimal representation, especially in financial or scientific applications where accuracy is critical.

Updated on: 2026-03-25T05:39:22+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements