2014-03-13 43 views
1

我有一個計算方法,當用戶使用Cartridge作爲我的商店框架檢出時計算稅。十進制不是JSON可序列化

tax = tax * Decimal(str(settings.SHOP_DEFAULT_TAX_RATE))

計算工作properly.I然後傳遞到taxset_tax(request, _("GST+PST"), tax)

當我這樣做,我得到一個錯誤Decimal('12.0') is not JSON serializable

當我將它轉換爲浮動(set_tax(request, _("GST+PST"), float(tax))它的工作原理;但是當我經過結帳我得到這個錯誤:

unsupported operand type(s) for +=: 'Decimal' and 'float'

在我的設置:

  • SHOP_DEFAULT_TAX_RATE = 0.12

我見過我需要使用自定義JSONEncoder但錯誤的解決方案r發生在Django內部。

謝謝。

+4

相關http://stackoverflow.com/q/1960516/674039 – wim

+0

出於好奇,爲什麼你需要小數?如果你正在處理稅款(金額),浮動精度應該沒問題,除非你打算處理ALOT現金...... – mgilson

+3

@mgilson:實際上,情況正好相反;問題是,金錢不是衡量儀表的敏感度;財務計算中的精確度概念是荒謬的。 '0.02美元* *正好*兩美分;不是兩美分加上或減去半分。 – SingleNegationElimination

回答