问题描述
系统设计中,经常会碰到金额的相关问题,金额计算、换算等等,而其中最重要的一点就是精度问题。如何处理好精度,而不是至于计算错误,是个比较重要,也需要小心处理的的问题。
常见处理方式
- 以最小货币单位且整型类型来进行存储
- 能够试应绝大部分的系统,处理简单
- 阿里手册推荐的强制规则
- 以Big Decimal进行存储和处理
- 适配所有系统,但是处理相对麻烦一点
简单结论
一定要根据自己的业务场景去选择,如果对自己的业务场景不熟悉,那么就使用BigDecimal吧。
举个栗子
在一些企业之间的交易中,货物是按照吨这个计量单位进行交易的,例如一吨1块钱,然后计价单位却是按照千克来计价的,这时候1千克的价钱就是0.001元,而如果按照最小货币单位“分”来存储,那么单价就是0,交易价格就会出错了,这种场景是不适合的。
这其中主要是存在了一个计量单位和售卖单位的换算问题,且这个换算公式是不固定的,可能是10:1,可能是1000:1,也可能是10000:1。
场景说明
所以说,如果是系统中不会存在计量单位的换算,如一般的电商系统,计量单位就是售卖单位,这种情况是非常适合用整型的。否则,如果存在计量单位和售卖单位的换算,那么可能就需要考虑Big Decimal了。
一切以系统业务的正确性为准,而不是以某些技术文档为准。
网友评论