Rounding a number means making the number simpler by keeping its value intact but closer to the next number. **Example:** If we want to round off a number, say 3.5. It will be rounded to the nearest whole number which is 4. However, the number 3.74 will be rounded to one decimal place to give 3.7.

**Method 1: **Using** **Built-in** ****round()**** **Function.

In Python there is a built-in round() function which rounds off a number to the given number of digits. The function round() accepts two numeric arguments, n and n digits and then returns the number n after rounding it to n digits. If the number of digits are not provided for rounding off, the function rounds off the given number n to the nearest integer.

Syntax:round(number, number of digits)

Parameters:

number:The number to be roundednumber of digits (Optional):The number of digits up to which the given number is to be rounded

**Example:**

## python3

`# For integers` `print` `(` `round` `(` `11` `))` ` ` `# For floating point` `print` `(` `round` `(` `22.7` `)) ` ` ` `# if the second parameter is present` ` ` `# when the (ndigit+1)th digit is =5 ` `print` `(` `round` `(` `4.465` `, ` `2` `)) ` ` ` `# when the (ndigit+1)th digit is >=5 ` `print` `(` `round` `(` `4.476` `, ` `2` `)) ` ` ` `# when the (ndigit+1)th digit is <5 ` `print` `(` `round` `(` `4.473` `, ` `2` `))` |

**Output:**

11 23 4.46 4.48 4.47

**Method 2: **Using **Truncation **concept.

Truncation is one of the simplest methods to round a number which involves truncating a number to a given number of digits. In this function, each digit after a given position is replaced with 0. **truncate()** function can be used with positive as well as negative numbers.

Truncation function can be implemented in following way:

- Multiplying the number by 10^p (10 raised to the pth power) to shift the decimal point p places to the right.
- Taking the integer part of that new number using int().
- Shifting the decimal place p places back to the left by dividing by 10^p.

Implementation of the Truncation concept using truncate() user-defined function:

## python3

`# defining truncate function` `# second argument defaults to 0` `# so that if no argument is passed ` `# it returns the integer part of number` ` ` `def` `truncate(n, decimals ` `=` `0` `):` ` ` `multiplier ` `=` `10` `*` `*` `decimals` ` ` `return` `int` `(n ` `*` `multiplier) ` `/` `multiplier` ` ` `print` `(truncate(` `16.5` `))` `print` `(truncate(` `-` `3.853` `, ` `1` `))` `print` `(truncate(` `3.815` `, ` `2` `))` ` ` `# we can truncate digits towards the left of the decimal point` `# by passing a negative number.` `print` `(truncate(` `346.8` `, ` `-` `1` `))` `print` `(truncate(` `-` `2947.48` `, ` `-` `3` `))` |

**Output:**

16.0 -3.8 3.81 340.0 -2000.0

**Method 3: **Using **Math**.**ceil()** and** ****Math.floor()**** **functions.**Math.ceil():** This function returns the nearest integer that is greater than or equal to a given number. **Math.floor(): **This function returns the nearest integer less than or equal to a given number. **Example:**

## python3

`# import math library` `import` `math` ` ` `# ceil value for positive` `# decimal number` `print` `(math.ceil(` `4.2` `))` ` ` `# ceil value for negative` `# decimal number` `print` `(math.ceil(` `-` `0.5` `))` ` ` `# floor value for decimal ` `# and negative number` `print` `(math.floor(` `2.2` `))` `print` `(math.floor(` `-` `0.5` `))` |

**Output:**

5 0 2 -1

**Method 3: **Using **Rounding Up **concept.

In Rounding Up a number is rounded up to a specified number of digits.

Rounding up function can be implemented in following way:

- First the decimal point in n is shifted the correct number of places to the right by multiplying n by 10 ** decimals.
- The new value is rounded up to the nearest integer using math.ceil()
- Finally, the decimal point is shifted back to the left by dividing by 10 ** decimals.

**Implementation of the rounding up concept using round_up() user-defined function:**

## python3

`# import math library` `import` `math` ` ` `# define a function for ` `# round_up` `def` `round_up(n, decimals ` `=` `0` `): ` ` ` `multiplier ` `=` `10` `*` `*` `decimals ` ` ` `return` `math.ceil(n ` `*` `multiplier) ` `/` `multiplier` ` ` `# passing positive values` `print` `(round_up(` `2.1` `))` `print` `(round_up(` `2.23` `, ` `1` `))` `print` `(round_up(` `2.543` `, ` `2` `))` ` ` `# passing negative values` `print` `(round_up(` `22.45` `, ` `-` `1` `))` `print` `(round_up(` `2352` `, ` `-` `2` `))` |

**Output:**

3.0 2.3 2.55 30.0 2400.0

We can follow the diagram below to understand round up and round down. Round up to the right and down to the left.

Rounding up always rounds a number to the right on the number line and rounding down always rounds a number to the left on the number line. **Method 5: **Using** Rounding Down **concept.

In Rounding Down a number is rounded down to a specified number of digits.

Rounding down function can be implemented in following way:

- First the decimal point in n is shifted the correct number of places to the right by multiplying n by 10 ** decimals.
- The new value is rounded up to the nearest integer using math.floor().
- Finally, the decimal point is shifted back to the left by dividing by 10 ** decimals.

**Implementation of the rounding down concept using round_down() user-defined function:**

## python3

`import` `math` ` ` `# defining a function for` `# round down.` `def` `round_down(n, decimals` `=` `0` `):` ` ` `multiplier ` `=` `10` `*` `*` `decimals` ` ` `return` `math.floor(n ` `*` `multiplier) ` `/` `multiplier` ` ` `# passing different values to function` `print` `(round_down(` `2.5` `))` `print` `(round_down(` `2.48` `, ` `1` `))` `print` `(round_down(` `-` `0.5` `))` |

**Output:**

2.0 2.4 -1.0

**Method 5:** Using** Rounding Bias **concept.

The concept of symmetry introduces the notion of rounding bias, that describes how rounding affects numeric data in a dataset.

The rounding up strategy has a round towards positive infinity bias, as the value is always rounded up in the direction of positive infinity. Similarly, the rounding down strategy has a round towards negative infinity bias. The truncation strategy has a round towards negative infinity bias on positive values and a round towards positive infinity for negative values. Rounding functions with this behaviour are said to have a round towards zero bias, in general.

**a) Rounding Half Up **concept.

The rounding half up rounds every number to the nearest number with the specified precision and breaks ties by rounding up.

Rounding half up strategy is implemented by shifting the decimal point to the right by the desired number of places. In this case we will have to determine whether the digit after the shifted decimal point is less than or greater than equal to 5.

We can add 0.5 to the value which is shifted and then round it down with the math.floor() function.

**Implementation of round_half_up() function:**

## python3

`import` `math` ` ` `# defining round_half_up` ` ` `def` `round_half_up(n, decimals` `=` `0` `):` ` ` `multiplier ` `=` `10` `*` `*` `decimals` ` ` `return` `math.floor(n ` `*` `multiplier ` `+` `0.5` `) ` `/` `multiplier` ` ` `# passing different values to the function` ` ` `print` `(round_half_up(` `1.28` `, ` `1` `))` `print` `(round_half_up(` `-` `1.5` `))` `print` `(round_half_up(` `-` `1.225` `, ` `2` `))` |

**Output:**

1.3 -1.0 -1.23

**b) Rounding Half Down **concept.

This rounds to the nearest number similarly like rounding half up method, the difference is that it breaks ties by rounding to the lesser of the two numbers. Rounding half down strategy is implemented by replacing math.floor() in the round_half_up() function with math.ceil() and then by subtracting 0.5 instead of adding.

**Implementation of round_half_down() function:**

## python3

`# import math library` `import` `math` ` ` `# defining a function` `# for round_half_down` `def` `round_half_down(n, decimals` `=` `0` `):` ` ` `multiplier ` `=` `10` `*` `*` `decimals` ` ` `return` `math.ceil(n ` `*` `multiplier ` `-` `0.5` `) ` `/` `multiplier` ` ` `# passing different values to the function` `print` `(round_half_down(` `2.5` `))` `print` `(round_half_down(` `-` `2.5` `))` `print` `(round_half_down(` `2.25` `, ` `1` `))` |

**Output:**

2.0 -3.0 2.2

**Method 6: Rounding Half Away From Zero.**

In Rounding Half Away From Zero we need to do is to start as usual by shifting the decimal point to the right a given number of places and then notice the digit(d) immediately to the right of the decimal place in the new number. There are four cases to consider:

- If n is positive and d >= 5, round up
- If n is positive and d = 5, round down
- If n is negative and d >= 5, round down
- If n is negative and d < 5, round up

After rounding as per the rules mentioned above, we can shift the decimal place back to the left.

**Rounding Half To Even:**There is a way to mitigate rounding bias while we are rounding values in a dataset. We can simply round ties to the nearest even number at the desired precision. The rounding half to even strategy is the strategy used by Python’s built-in round(). The**decimal class**provides support for fast correctly-rounded decimal floating-point arithmetic. This offers several advantages over the float datatype. The default rounding strategy in the decimal module is ROUND_HALF_EVEN.

**Example:**

## python3

`# import Decimal function from ` `# decimal library` `from` `decimal ` `import` `Decimal` `print` `(Decimal(` `"0.1"` `))` `print` `(Decimal(` `0.1` `))` ` ` `# Rounding a Decimal number is` `# done with the .quantize() function` `# "1.0" in .quantize() determines the` `# number of decimal places to round the number` `print` `(Decimal(` `"1.65"` `).quantize(Decimal(` `"1.0"` `)))` `print` `(Decimal(` `"1.675"` `).quantize(Decimal(` `"1.00"` `)))` |

**Output:**

0.1 0.1000000000000000055511151231257827021181583404541015625 1.6 1.68

Attention geek! Strengthen your foundations with the **Python Programming Foundation** Course and learn the basics.

To begin with, your interview preparations Enhance your Data Structures concepts with the **Python DS** Course. And to begin with your Machine Learning Journey, join the **Machine Learning – Basic Level Course**