Using Python 2.7 how do I round my numbers to two decimal places rather than the 10 or so it gives?
print "financial return of outcome 1 =","$"+str(out1)
Use str. format() with “{:. 2f}” as string and float as a number to display 2 decimal places in Python. Call print and it will display the float with 2 decimal places in the console.
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 number Round 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-point Decimal('33.50500000000000255795384873636066913604736328125')
Proper way to round financial values:
>>> Decimal("33.505").quantize(Decimal("0.01")) # Half-even rounding by default Decimal('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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With