Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
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
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.
