Python 3十进制模块和限制十进制长度

时间:2014-11-17 10:12:00

标签: python python-3.x decimal

刚从2.7移动到3.4我遇到了这个问题,带有十进制:

我正在尝试使用decimal模块复制SQL数值数据类型。 在2.7中,我这样做了:

def copy_ctx(places, prec):
    res = DefaultContext.copy()
    res.prec = places
    res.Emin = res.Emax = places - prec - 1
    return res

这有效地将任何结果Decimal限制为指定的地点数或更少。 尝试实例化一个太大的数字会产生OverflowError。 例如:

x = Decimal(1000000, copy_ctx(5,2))  # Error! number is too much
x = Decimal(100, copy_ctx(5,2))  # == 100.00

但是,在Python 3.4中,decimal不允许我将Emin设置为正数。

如何实现与2.7相同的行为?

1 个答案:

答案 0 :(得分:0)

好吧,最终甚至2.7版本的decimal模块也不完全是SQL Numeric友好的。我必须根据我想要的背景检查每一个结果。我现在在类构造函数中添加了一个额外的量化步骤。