数据库设计 – 将货币价值作为美分/次要单位存储的缺点是什么?
发布时间:2020-12-12 16:36:40 所属栏目:MsSql教程 来源:网络整理
导读:我注意到,一些金融api像条码api的信用卡处理需要这个数额以美分的形式传递,这似乎是一个很好的简化,它让我想知道为什么我不会在我的应用程序中的所有地方我现在在我的 Java代码中使用数据库NUMERIC无限长度与Postgres和BigDecimal,但是我以简单的方式存储钱作
我注意到,一些金融api像条码api的信用卡处理需要这个数额以美分的形式传递,这似乎是一个很好的简化,它让我想知道为什么我不会在我的应用程序中的所有地方我现在在我的
Java代码中使用数据库NUMERIC无限长度与Postgres和BigDecimal,但是我以简单的方式存储钱作为分.
储存钱作为美分的缺点是什么? 更新对于没有美分的货币,我们可以将问题概括为将货币存储为货币的最小小单位,因此美元和其他货币的等值金额. 解决方法缺点是你不能代表分数单位.如果您执行兴趣计算等,这是一个问题.但是,如果你正在做一个“真正的钱”交易,这个问题就消失了.货币是非十进制无关紧要 – 只要有一个最小的单位,你可以用它代表任何其他的数额.您可能需要更聪明地了解如何以可读的格式显示,如果这是相关的,但这是一个单独的问题. 事实上,使用最小的单位可能会简化执行转换,因为您可以计算每个货币对的最小单位之间的转换率.当然,一旦转化率,你最终将需要再次使用BigDecimal(或类似的). 因此,总而言之,最好使用最小单位作为您的面额,并使用BigDecimal处理小数部分(如果可能出现).不要使用IEEE浮点数,因为它们不能正确地表示所有十进制数.这将导致会令某人失望的种种错误. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |