2014-11-17 15 views
0

2.7只是移動到3.4我遇到了這個問題與十進制:的Python 3個小模塊,並限制小數長度

我試圖複製SQL數字數據類型與decimal模塊。 在2.7,我這樣做:

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

這有效地限制由此產生的任何Decimal s到的地方或更少的指定數量。 試圖實例化一個太大的數字將產生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不會讓我設置額敏爲正數。

我該如何達到2.7中的相同行爲?

+0

我曾考慮允許一個積極的Emin作爲Python 2.7中的一個bug,真的。使用它來設置整數部分的上限是.. creative。 –

+0

該限制在[new C optimisations](http://bugs.python.org/issue7652)中執行;唯一的解決辦法是禁用'_decimal'模塊(例如將其從安裝中徹底刪除)。 **不建議。我還沒有在這裏看到一條替代路線。 –

+0

你是什麼意思「創意」?還有另一種設置Decimal可以使用的最大位數的方法嗎? – velis

回答

0

那麼,最終即使是2.7版本的decimal模塊也不完全是SQL數字友好的。我不得不根據我想要的環境來檢查每一個結果。我現在在類構造函數中添加了額外的量化步驟。