ALongRanger
172 天前
我的回答可能和具体语言无关。
1. 建议采用对应货币最小单位作为存储,主要是为了避免在计算和存储过程中产生精度损失导致资损;
2. 不管是 java 还是 go ,请编码统一的金额处理工具包,定义好金额结构和转换方法,避免直接使用基础结构例如整形,浮点来表示金额, 所有金额的表示直接使用定义好的金额结构。 整个项目内部统一采用,保证金额计算、转换的准确性。
3. 一个金额处理工具包应该考虑如下内容:
3.1. 要能够进行序列化和比较
3.2 要能存储币种和金额,要确保高精度和标准化
3.3 要能提供丰富的操作方法,包括加减乘除,需要自定义舍入和四舍五入;
3.4 要提供常用单位 getAmount()和获取最小单位金额的方法 getAmountMinorUnit()
3.5 确保结构的不可变性和安全性;
3.6 需要能够根据币种计算出最小单位,例如人民币就是分,日元就是元;
3.7 乘除支持舍入,默认使用四舍五入,但是支持其它舍入方式。
以上可以在跨境支付、金融应用等需要高精度、多币种支持的场景种安全有效的进行金额处理。