在某些环境中,精确小数(数字,数字......)是使用scale
和precision
定义的,其中缩放是所有有效数字,精度是小数点右边的精度。如果铸造字符串的精度高于实现定义的精度,我想使用python的十进制实现来引发错误。
例如,我有一个环境,scale = 4
和precision = 2
。
如何实现这些命令来引发错误,因为它们的精度超过了实现的精度?
decimals.Decimal('1234.1')
decimals.Decimal('0.123')
答案 0 :(得分:2)
我在decimal
module中找到的最接近的位于context.create_decimal_from_float
示例中,使用Inexact
context trap:
>>> context = Context(prec=5, rounding=ROUND_DOWN)
>>> context.create_decimal_from_float(math.pi)
Decimal('3.1415')
>>> context = Context(prec=5, traps=[Inexact])
>>> context.create_decimal_from_float(math.pi)
Traceback (most recent call last):
...
Inexact: None
十进制模块似乎没有规模的概念。它的精度基本上就是你的尺度+精度。
答案 1 :(得分:0)
您总是可以定义更严格的Decimal类,并检查setter和构造函数中的小数位数。这应该与Decimal对象完全相同,除了它在创建或设置超过两位小数时引发ValueError。
class StrictDecimal:
def __init__(self, x):
x = Decimal(x)
if format(x, '.2f') != str(x):
raise ValueError('Precision must by limited to 2 digits')
self._x = x
@property
def x(self):
return self._x
@x.setter
def x(self, x):
x = Decimal(x)
if format(x, '.2f') != str(x):
raise ValueError('Precision must by limited to 2 digits')
self._x = x