Python Tutorial Decimal floating point arithmetic

Mondo Technology Updated on 2024-01-19

Hi guys, and welcome back to my Python tutorial column!Today we're going to delve into a topic that is very important in financial applications and other areas that require exact decimal notation – decimal floating-point arithmetic.

In Python, we usually use binary floating-point numbers for arithmetic, but in some special scenarios, such as financial calculations, we need higher precision and controllability. That's where decimal floating-point arithmetic comes in.

Why use decimal floating-point?

Compared to binary floating-point, decimal floating-point is more suitable for:

Financial Applications and Exact Representation: Especially when there is a need for an accurate representation of monetary or other financial data.

Precision control: You can flexibly control the number of decimal places to ensure that the calculation results meet regulatory or regulatory requirements.

Rounding control: Decimal floating-point allows you to have more control over how rounding is done and avoids potential problems.

Effective decimal place tracking: It is convenient to track the position of significant digits to ensure that the calculation results meet expectations.

Match manual calculations: Ensure that the calculation results are consistent with the manual calculation to avoid problems caused by binary floating-point error.

Example demonstration

Let's look at a simple example of calculating a 70% tax on a 5-cent fee. Calculate separately using decimal floating-point numbers and binary floating-point numbers to see the difference:

from decimal import *

Decimal floating-point calculations.

result_decimal = round(decimal('0.70') *decimal('1.05'), 2)

print(result decimal) output: decimal('0.74')

Binary floating-point calculations.

result_binary = round(0.70 * 1.05, 2)

print(result binary) output: 073

Output

The results show that decimal floating-point and binary floating-point calculations may differ when rounding is required. This distinction becomes very important in scenarios that require high accuracy.

More accurate demonstrations

The advantage of decimal floating-point numbers is not only rounding, but also more accurate modulo calculations and equality checks

from decimal import *

Decimal floating-point modulo calculations.

mod_result_decimal = decimal('1.00') %decimal('.10')

print(mod result decimal) output: decimal('0.00')

Binary floating-point modulo calculations.

mod_result_binary = 1.00 % 0.10

print(mod result binary) output: 009999999999999995

Decimal floating-point equality test.

equality_decimal = sum([decimal('0.1')] 10) == decimal('1.0')

print(equality decimal) output: true

Binary floating-point equality test.

equality_binary = 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 == 1.0

print(equality binary) output: false

Output

true

false

By setting the context precision, we can ensure that decimal floating-point numbers are more accurate in modulo calculations and equality tests.

Precise arithmetic settings

In order to achieve the exact arithmetic required, we can use getcontext()prec to set the precision.

from decimal import *

getcontext().prec = 36

result = decimal(1) / decimal(7)

print(result) output: decimal('0.142857142857142857142857142857142857')

Output

In this way, we can adjust the arithmetic accuracy according to the actual needs and ensure the accuracy of the calculation results.

I hope this decimal floating-point arithmetic depth analysis is helpful to you!If you are interested in other Python topics, remember to subscribe to my column, like and share it with your friends. See you next time!

Python tutorial programming skills

Related Pages