O'Reilly logo

Python Cookbook, 2nd Edition by David Ascher, Anna Ravenscroft, Alex Martelli

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

3.13. Formatting Decimals as Currency

Credit: Anna Martelli Ravenscroft, Alex Martelli, Raymond Hettinger

Problem

You want to do some tax calculations and display the result in a simple report as Euro currency.

Solution

Use the new decimal module, along with a modified moneyfmt function (the original, by Raymond Hettinger, is part of the Python library reference section about decimal):

import decimal """ calculate Italian invoice taxes given a subtotal. """ def italformat(value, places=2, curr='EUR', sep='.', dp=',', pos='', neg='-', overall=10): """ Convert Decimal ``value'' to a money-formatted string. places: required number of places after the decimal point curr: optional currency symbol before the sign (may be blank) sep: optional grouping separator (comma, period, or blank) every 3 dp: decimal point indicator (comma or period); only specify as blank when places is zero pos: optional sign for positive numbers: "+", space or blank neg: optional sign for negative numbers: "-", "(", space or blank overall: optional overall length of result, adds padding on the left, between the currency symbol and digits """ q = decimal.Decimal((0, (1,), -places)) # 2 places --> '0.01' sign, digits, exp = value.quantize(q).as_tuple( ) result = [ ] digits = map(str, digits) append, next = result.append, digits.pop for i in range(places): if digits: append(next( )) else: append('0') append(dp) i = 0 while digits: append(next( )) i += 1 if i == 3 and digits: i = 0 append(sep) while len(result) < overall: ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required