11.8 Decimal Floating Point Arithmetic

The ‘decimal’ module offers a
Decimal datatype for decimal floating point arithmetic. Compared to
the built-in float implementation of binary floating point, the new
class is especially helpful for financial applications and other uses which
require exact decimal representation, control over precision, control over
rounding to meet legal or regulatory requirements, tracking of significant
decimal places, or for applications where the user expects the results to
match calculations done by hand.

For example, calculating a 5% tax on a 70 cent phone charge gives
different results in decimal floating point and binary floating point.
The difference becomes significant if the results are rounded to the
nearest cent:

The Decimal result keeps a trailing zero, automatically inferring four
place significance from multiplicands with two place significance. Decimal reproduces
mathematics as done by hand and avoids issues that can arise when binary
floating point cannot exactly represent decimal quantities.

Exact representation enables the Decimal class to perform
modulo calculations and equality tests that are unsuitable for binary
floating point: