Decimal无法序列化为JSON

1 投票
1 回答
5485 浏览
提问于 2025-04-17 22:12

我有一个计算,用来在用户结账时计算税费,我的商店框架是Cartridge

计算公式是:tax = tax * Decimal(str(settings.SHOP_DEFAULT_TAX_RATE))

这个计算是正常的。然后我把tax传给set_tax(request, _("GST+PST"), tax)

但是这样做时,我遇到了一个错误:Decimal('12.0') is not JSON serializable,意思是说这个数字格式不对,不能被转换成JSON格式。

当我把它转换成浮点数(set_tax(request, _("GST+PST"), float(tax)))时就可以了;但是在结账时又出现了另一个错误:

unsupported operand type(s) for +=: 'Decimal' and 'float',这表示我不能把一个Decimal类型的数字和一个浮点数相加。

在我的设置中:

  • SHOP_DEFAULT_TAX_RATE = 0.12

我看到有些解决方案提到需要使用自定义的JSON编码器,但这个错误是在Django内部发生的。

谢谢。

1 个回答

3

这个问题在几周前已经修复了,但还没有发布新版本:

https://github.com/stephenmcd/cartridge/commit/628bd203f39a62d9de2613de7057e6742657111f

幸运的是,你现在可以把开发版作为依赖项添加进来。

顺便说一下,使用小数类型是正确的选择。

撰写回答