Bra*_*ody 4 bigdecimal go financial
我正在Go建立一个在线商店.正如所料,一些重要的部分需要记录确切的货币金额.我知道与浮点数相关的舍入问题(即0.3无法准确表示等).
货币的概念似乎很容易表现为一个字符串.但是,我不确定哪种类型最适合表达实际的货币金额.
关键要求似乎是:
我知道math/big.Rat它似乎解决了很多这些问题,但是例如它的字符串输出将无法正常工作,因为它将以"a/b"形式输出.我确信也有解决方案,但我想知道是否存在某种现有的最佳实践,我不知道(无法轻易找到)这类事情.
更新:这个包看起来很有希望:https://code.google.com/p/godec/
你应该保持i18n与货币实施脱钩.所以不,不要将所有内容捆绑在一个结构中并将其称为一天.标记金额代表的货币,但仅此而已.让i18n处理格式化,字符串化,前缀等.
使用任意精度数值类型math/big.Rat.如果这不是一个选项(因为序列化限制或其他障碍),那么使用最大的固定大小整数类型,您可以用来表示您所代表的任何货币的原子货币数量 - 美元的分数,日元的日元,兑换瑞士法郎,兑换欧元,等等.
当使用第二种方法时,要特别注意不要引起溢出,并为除法定义明确且有意义的舍入行为.