import decimal
class BigDecimal(decimal.Decimal):
""" Compatibility class for decimal.Decimal """
ROUND_DOWN = decimal.ROUND_DOWN
ROUND_UP = decimal.ROUND_UP
@classmethod
def _mk_exp(cls, prec):
return cls('0.' + '0' * prec)
def divide(self, other, scale=None, rounding=None):
if not scale and not rounding:
return BigDecimal(self / other)
if type(scale) is not int:
raise ValueError("Expected integer value for scale")
exp = BigDecimal._mk_exp(scale)
return BigDecimal((self / other).quantize(exp, rounding=rounding))
@classmethod
def valueOf(cls, value):
return cls(value)
def multiply(self, other):
return BigDecimal(self * other)
def setScale(self, scale, rounding):
exp = BigDecimal._mk_exp(scale)
return BigDecimal(self.quantize(exp, rounding=rounding))
def add(self, other):
return BigDecimal(self + other)
def subtract(self, other):
return BigDecimal(self - other)
def longValue(self):
return int(self)
def compareTo(self, other):
return BigDecimal(self.compare(other))
BigDecimal.ZERO = BigDecimal(0)
BigDecimal.ONE = BigDecimal(1)
BigDecimal.TEN = BigDecimal(10)