我正在用 Go 建立一个在线商店。正如预期的那样,几个重要的部分需要记录准确的货币金额。我知道与浮点数相关的舍入问题(即 0.3 不能精确表示等)。
货币的概念似乎很容易仅表示为字符串。但是,我不确定哪种类型最适合表达实际货币金额。
关键要求似乎是:
可以根据货币精确表示小数到指定小数位数(某些货币使用超过 2 个小数位:http : //www.londonfx.co.uk/ccylist.html)
显然需要基本的算术运算 - add/sub/mul/div。
理智的字符串转换 - 这本质上意味着转换为十进制等价物。此外,国际化至少需要是可能的,即使所有逻辑都不是内置的(欧洲为 1.000,美国为 1,000)。
四舍五入,可能使用替代的四舍五入方案,如银行家的四舍五入。
需要有一个简单而明显的方法来对应一个数据库值——在我的例子中是 MySQL。(在此级别将值视为字符串可能最有意义,以确保它的值被准确保留。)
我知道 math/big.Rat 并且它似乎解决了很多这些问题,但例如它的字符串输出不会按原样工作,因为它将以“a/b”形式输出。我确信也有解决方案,但我想知道是否有某种现有的最佳实践,我不知道(不容易找到)这种事情。
更新:这个包看起来很有希望:https : //code.google.com/p/godec/
Cats萌萌
相关分类