我注意到,一些金融api像条码api的信用卡处理需要这个数额以美分的形式传递,这似乎是一个很好的简化,它让我想知道为什么我不会在我的应用程序中的所有地方我现在在我的
Java代码中使用数据库NUMERIC无限长度与Postgres和BigDecimal,但是我以简单的方式存储钱作为分.
储存钱作为美分的缺点是什么?
有没有具体的操作,难以用钱作为美分?
储存的钱可以使用全世界的货币或者是
占不同货币成为如此巨大的混乱
还有特殊情况?
有没有一个很好的java库来处理
钱为美分?
更新对于没有美分的货币,我们可以将问题概括为将货币存储为货币的最小小单位,因此美元和其他货币的等值金额.
解决方法
缺点是你不能代表分数单位.如果您执行兴趣计算等,这是一个问题.但是,如果你正在做一个“真正的钱”交易,这个问题就消失了.
货币是非十进制无关紧要 – 只要有一个最小的单位,你可以用它代表任何其他的数额.您可能需要更聪明地了解如何以可读的格式显示,如果这是相关的,但这是一个单独的问题.
事实上,使用最小的单位可能会简化执行转换,因为您可以计算每个货币对的最小单位之间的转换率.当然,一旦转化率,你最终将需要再次使用BigDecimal(或类似的).
因此,总而言之,最好使用最小单位作为您的面额,并使用BigDecimal处理小数部分(如果可能出现).不要使用IEEE浮点数,因为它们不能正确地表示所有十进制数.这将导致会令某人失望的种种错误.