这次项目中有支付的模块,所以就会涉及到钱的计算,从网上查了写资料,发现大家都用BigDecimal,与此同时都说不用double,为什么就不用double呢?
其实大家用BigDecimal的原因是因为它具有更高的精度和更小的范围。那double和BigDecimal相比,精度差多少呢,看下图:
其实在实际的使用中,我根本不需要这么高的精度,感觉使用double也没什么问题,不过double在设置精度的时候没有BigDecimal方便,所以更倾向使用BigDecimal。
其实遇到这个问题的时候,我也请教了一些人,我姐夫兼某架构师给出一个很巧妙的方案,
因为我们涉及的金额不会很大,而且精度只要求到两位,所以他给出的方案用int处理,所有的运算都乘以100,数据库也可以用int,只有在需要显示的时候处理下就行,这样既没有精度问题,运算起来的效率也要比double或者BigDecimal都要高很多。
如果大家还有什么更好的方案,可以提出来哈,共享下,集体的智慧是无穷的。