Skip to content
Snippets Groups Projects

Changes to rm-refactor-overloaded-assets-operators

1 file
+ 7
3
Compare changes
  • Side-by-side
  • Inline
from decimal import Decimal
from decimal import Decimal
from typing import Union
from typing import Optional, Union
import warnings
import warnings
class DecimalConverter:
class DecimalConverter:
@classmethod
@classmethod
def convert(cls, amount: Union[int, float, str], precision: int) -> Decimal:
def convert(cls, amount: Union[int, float, str], precision: Optional[int] = None) -> Decimal:
cls.__warn_if_precision_might_be_lost(amount, precision)
if precision is not None:
 
cls.__warn_if_precision_might_be_lost(amount, precision)
# We could not pass float variable directly to Decimal initializer as from the nature of floats it won't result
# We could not pass float variable directly to Decimal initializer as from the nature of floats it won't result
# in the exact decimal value. We need to convert float to string first like https://stackoverflow.com/a/18886013
# in the exact decimal value. We need to convert float to string first like https://stackoverflow.com/a/18886013
@@ -14,6 +15,9 @@ class DecimalConverter:
@@ -14,6 +15,9 @@ class DecimalConverter:
if isinstance(amount, float):
if isinstance(amount, float):
amount = repr(amount)
amount = repr(amount)
 
if precision is None:
 
return Decimal(amount).normalize()
 
exponent = Decimal(10) ** (-1 * precision)
exponent = Decimal(10) ** (-1 * precision)
return Decimal(amount).quantize(exponent).normalize()
return Decimal(amount).quantize(exponent).normalize()
Loading