Skip to content
master
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 

README.md

About

decimalcontext is a decorator to help create a local decimal context for a specific function.

It works by injecting a new variable called decimal_ctx into the function's global scope that you can use within the function. If the function accepts any Decimal variables it will also convert those to the new decimal context.

FAQ

Why not use decimal.localcontext?


You can, however, if your function passes Decimals around and you need to change the rounding value then you will have to re-create your Decimal values (d = ctx.create_decimal(d)) to make sure they adhere to the correct context.

decimalcontext will re-create the incoming Decimal objects with the newly created decimal context.

This will make sure you will never use Decimal outside of the context you want to use it without changing the default thread's context.

Example:

from decimal import Decimal, ROUND_DOWN, ROUND_UP
from decimalcontext import decimal_context

@decimal_context(prec=2, rounding=ROUND_UP)
def calc_func1(a: Decimal, b: Decimal) -> Decimal:
    return a * b

@decimal_context(rounding=ROUND_DOWN)
def calc_func2(a: Decimal, b: Decimal) -> Decimal:
    return a * b

@decimal_context(prec=4, rounding=ROUND_DOWN)
def calc_func3(a: Decimal, b: Decimal) -> Decimal:
    print(a * b)
    decimal_ctx.prec = 2
    decimal_ctx.rounding = ROUND_DOWN
    a = decimal_ctx.create_decimal(a)
    b = decimal_ctx.create_decimal(b)
    print(a * b)


a = Decimal("2.4567")
b = Decimal("5.7654")

print("calc_func1: ", calc_func1(a, b=b))
print("calc_func2: ", calc_func2(a, b=b))
print("calc_func3:")
calc_func3(a, b)

NOTE: if you are creating new Decimal variables inside a function that is decorated by the decimal_context decorator use decimal_ctx.create_decimal to create Decimal variables that conforms to the context set in decimal_ctx.

About

A Python decorator for helping set a local decimal context

Topics

Resources

License

Releases

No releases published

Packages

No packages published

Languages

You can’t perform that action at this time.