Python fractions module enables the user to manage fractions related computations in an efficient manner. This module enables us to create fractions from integers, floats, decimal, and strings.

This fraction module supports rational number arithmetic operations.

## Basics of fractions module

**1. Importing a fraction module**:

```
from fractions import Fraction
```

**2. Instantiate the fraction class**:

There are a number of ways to instantiate the fraction class. The following are some of the ways to instantiate the fraction class:

- Pass the numerator and denominator
- Instantiate with float
- Instantiate with decimal
- Instantiate with string

**Example: Instantiate by passing numerator and denominator**

```
from fractions import Fraction
Fraction(1, 2)
```

**Example: Instantiate with float**

```
from fractions import Fraction
Fraction(2.5)
```

**Example: Instantiate with decimal**

```
from fractions import Fraction
from decimal import Decimal
Fraction(Decimal('1.1'))
```

**Example: Instantiate the string**

```
from fractions import Fraction
Fraction('9/16')
```

## Creating fractions

```
import fractions
for num, decimal in [(1, 2), (3, 6), (30, 7)]:
result = fractions.Fraction(num, decimal)
print('{}/{} = {}'.format(num, decimal, result))
```

**Output:**

```
1/2 = 1/2
3/6 = 1/2
30/7 = 30/7
```

## Performing Arithmetic operations on fractions

The following example explains the different mathematical operations on fractions.

```
from fractions import Fraction
print(Fraction(100, 10) + Fraction(25, 5))
print(Fraction(18, 5) / Fraction(18, 10))
print(Fraction(18, 15) * Fraction(16, 25))
print(Fraction(17, 25) * Fraction(15, 25))
print(Fraction(12, 5) ** Fraction(12, 11))
```

**Output:**

## Fraction Instances

A Fraction instance is a fraction built from a pair of integers, rational numbers or string. Fractions are **hashable** and **immutable**, so their values can’t be changed once created.

**class fractions.Fraction(numerator=0, denominator=1) :** It requires the numerator and denominator to be **numbers. **A fraction value = (numerator/denominator) is returned as the output, the default values is 0. An error of zero division is raised if denominator = 0.

**Example:**

```
from fractions import Fraction
print(Fraction(10, 35))
print(Fraction(10, 13))
print(Fraction()) # default value
```

**Output:**

```
2/7
10/13
0
```

## Combining Math with fractions

The functions of the math module can be mixed with the fractional representation. The below example depicts one such representation.

```
import math
from fractions import Fraction
print("Square root: {}".format(math.sqrt(Fraction(21, 4))))
print("Floored to: {}".format(math.floor(Fraction(4100, 1100))))
print("Sined Fraction: {}".format(Fraction(math.sin(math.pi/2))))
```

**Output:**

```
Square root: 2.29128784747792
Floored to: 3
Sined Fraction: 1
```

## Rounding off fractions

There is a possibility to round off fractions by the number of digits the user wants in the denominator.

**Example:**

```
import fractions
result = fractions.Fraction('21/8')
print('Rounded without limit : {}'.format(round(result)))
print('Rounded to 2 digits : {}'.format(round(result, 2)))
```

**Output:**

```
Rounded without limit : 3
Rounded to 2 digits : 131/50
```

## Conclusion

We have understood and implemented the functionalities of the fractions module in Python.