Using Python's decimal Module for Precise Decimal Arithmetic
This article introduces Python's decimal module, explains its importance for high‑precision calculations, and provides step‑by‑step examples covering basic creation, arithmetic operations, precision control, rounding, formatting, division, comparisons, advanced contexts, and custom rounding modes.
Python's decimal module provides support for exact decimal arithmetic, which is essential for financial calculations and other scenarios that require high precision.
Basic Usage
Example 1: Creating a Decimal object
from decimal import Decimal
# Create Decimal object
num = Decimal('10.5')
print(num) # Output: 10.5Example 2: Arithmetic operations
from decimal import Decimal
num1 = Decimal('10.5')
num2 = Decimal('2.5')
result = num1 + num2
print(result) # Output: 13.0Example 3: Controlling precision
from decimal import Decimal, getcontext
# Set global precision
getcontext().prec = 4
num1 = Decimal('1.23456')
num2 = Decimal('2.34567')
result = num1 + num2
print(result) # Output: 3.580Advanced Usage
Example 4: Rounding (ROUND_HALF_UP)
from decimal import Decimal, ROUND_HALF_UP
num = Decimal('1.23456')
rounded_num = num.quantize(Decimal('.01'), rounding=ROUND_HALF_UP)
print(rounded_num) # Output: 1.23Example 5: String formatting
from decimal import Decimal
num = Decimal('123456.789')
formatted_num = f"${num:,.2f}"
print(formatted_num) # Output: $123,456.79Example 6: Division
from decimal import Decimal
num1 = Decimal('10')
num2 = Decimal('3')
result = num1 / num2
print(result) # Output: 3.333333333333333333333333333Example 7: Comparison
from decimal import Decimal
num1 = Decimal('10.5')
num2 = Decimal('10.50')
is_equal = num1 == num2
print(is_equal) # Output: TrueExample 8: Complex mathematical computation (e value)
from decimal import Decimal, getcontext
import math
getcontext().prec = 50
e = Decimal(0)
for i in range(20):
e += Decimal(1) / Decimal(str(math.factorial(i)))
print(e) # Output: 2.71828182845904523536028747135266249Example 9: Handling currency
from decimal import Decimal
price = Decimal('19.99')
tax_rate = Decimal('0.08') # 8%
total_price = price * (1 + tax_rate)
print(total_price) # Output: 21.5992Example 10: Local precision with context manager
from decimal import Decimal, localcontext
with localcontext() as ctx:
ctx.prec = 5
result = Decimal('1.23456789') + Decimal('2.34567890')
print(result) # Output: 3.580
# Global precision unchanged
print(Decimal('1.23456789') + Decimal('2.34567890')) # Output: 3.58024679Example 11: Custom rounding mode (ROUND_DOWN)
from decimal import Decimal, ROUND_DOWN
num = Decimal('1.23456')
rounded_num = num.quantize(Decimal('.01'), rounding=ROUND_DOWN)
print(rounded_num) # Output: 1.23Conclusion
The decimal module is ideal for applications that require exact decimal calculations, such as finance and scientific computing. The provided examples should help you understand and effectively use the module in your own projects.
Test Development Learning Exchange
Test Development Learning Exchange
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.