Rounding to two decimal places in Python 2.7? Rounding to two decimal places in Python 2.7? python python

Rounding to two decimal places in Python 2.7?


Use the built-in function round():

>>> round(1.2345,2)1.23>>> round(1.5145,2)1.51>>> round(1.679,2)1.68

Or built-in function format():

>>> format(1.2345, '.2f')'1.23'>>> format(1.679, '.2f')'1.68'

Or new style string formatting:

>>> "{:.2f}".format(1.2345)'1.23>>> "{:.2f}".format(1.679)'1.68'

Or old style string formatting:

>>> "%.2f" % (1.679)'1.68'

help on round:

>>> print round.__doc__round(number[, ndigits]) -> floating point numberRound a number to a given precision in decimal digits (default 0 digits).This always returns a floating point number.  Precision may be negative.


Since you're talking about financial figures, you DO NOT WANT to use floating-point arithmetic. You're better off using Decimal.

>>> from decimal import Decimal>>> Decimal("33.505")Decimal('33.505')

Text output formatting with new-style format() (defaults to half-even rounding):

>>> print("financial return of outcome 1 = {:.2f}".format(Decimal("33.505")))financial return of outcome 1 = 33.50>>> print("financial return of outcome 1 = {:.2f}".format(Decimal("33.515")))financial return of outcome 1 = 33.52

See the differences in rounding due to floating-point imprecision:

>>> round(33.505, 2)33.51>>> round(Decimal("33.505"), 2)  # This converts back to float (wrong)33.51>>> Decimal(33.505)  # Don't init Decimal from floating-pointDecimal('33.50500000000000255795384873636066913604736328125')

Proper way to round financial values:

>>> Decimal("33.505").quantize(Decimal("0.01"))  # Half-even rounding by defaultDecimal('33.50')

It is also common to have other types of rounding in different transactions:

>>> import decimal>>> Decimal("33.505").quantize(Decimal("0.01"), decimal.ROUND_HALF_DOWN)Decimal('33.50')>>> Decimal("33.505").quantize(Decimal("0.01"), decimal.ROUND_HALF_UP)Decimal('33.51')

Remember that if you're simulating return outcome, you possibly will have to round at each interest period, since you can't pay/receive cent fractions, nor receive interest over cent fractions. For simulations it's pretty common to just use floating-point due to inherent uncertainties, but if doing so, always remember that the error is there. As such, even fixed-interest investments might differ a bit in returns because of this.


You can use str.format(), too:

>>> print "financial return of outcome 1 = {:.2f}".format(1.23456)financial return of outcome 1 = 1.23