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

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.

No credit card required