我应该以正数还是负数存储退款记录?

Should I store refund records in positive or negative amount?

我正在向资深金融程序员寻求最佳实践。

例如 PSUDO 代码:

class Transaction(Model):
    order = ForeignKey()
    amount = DecimalField()
    type = 'refund' or 'purchase'

如果以负数存储退款,那么我可以简单地 运行 sum() 所有交易来获得余额,数学运算变得有点原生。

如果以正数存储退款,那么在像purchase - refund = balance这样的公式上更人性化,而且我不需要反转以在模板中显示正数退款。

我应该选择哪一个好处最多,陷阱更少?

一种方法是使用一个 amount 字段将值保存为正值,另一个字段如 signedAmount 保存它的签名版本。所以,当你想显示或记录它时,你使用 amount,当你想将它包含在计算中时,你使用 signedAmount.