今天测试突然提了一个bug给我,系统里面抵扣砖石不对,我是真的惊了,从服务器拿的数据时19.9元 然后我们本地计算,钻石比例是100,然后转换为砖石之后变成了 1989,当初还以为是算错了,后面上网一查,原来是double类型二进制运算溢出问题,不光是java ,.net也会有这样的问题,只有19.9会出问题,9.9和29.9不会;
处理方案
BigDecimal bignum1 = new BigDecimal(servicePrice);
BigDecimal bignum2 = new BigDecimal("100");
BigDecimal bignum3 = bignum1.multiply(bignum2); //乘法运算
allMoney = bignum3 .intValue();//应付金额(分)
本文介绍了一次系统中抵扣钻石计算错误的问题,详细分析了double类型在二进制运算中出现的溢出现象,并给出了使用BigDecimal进行精确计算的解决方案。
1933

被折叠的 条评论
为什么被折叠?



