今天早上去微贷网提现,进入到提现界面发现这样的一个问题:
微贷网提现页面的bug
看到了,我提现的金额小数点后面带了n多个0,我不知道微贷网的技术框架体系是什么,也不知道开发语言是什么,如果是java的话,我有必要给大家普及一下java里面怎么控制精度的问题。
java里面采用了一个BigDecimal类来控制精度,具体如何使用大家可以自行查询,
常见的操作有这样:
加减乘除如下:
add(BigDecimal augend)
subtract(BigDecimal subtrahend)
multiply(BigDecimal multiplicand)
divide(BigDecimal divisor)
这个问题也是也是一个常见的面试题目,在金融行业经常会基于BigDecimal类来封装常见的金额操作,比如精度控制,比如分,元的转换等。
如果你用double,float等来做金额计算,会发现得不到你想要的结果,甚至可能在不同的场景下等到的结果也会不一样。
这个是阿里巴巴java开发规约中提到的:
【强制】小数类型为decimal,禁止使用float和double。
说明:float和double在存储的时候,存在精度损失的问题,很可能在值的比较时,得到不正确的结果。如果存储的数据范围超过decimal的范围,建议将数据拆成整数和小数分开存储