处理之前人遗留的问题,在某些金额场景下会少一分钱,debug更进下发现是下面这段金额转换代码的问题
double price=Double.valueOf(req.getTotalFee()); DecimalFormat df = new DecimalFormat("#.00"); price = Double.valueOf(df.format(price)); int money = (int)(price * 100);
竟然是用的double转换的,真是巨坑!一般涉及到金额转换的都是用字符串String接收参数,再用bigDecimal进行转换的。
于是把上面的问题代码改成如下所示:
BigDecimal fenBd = new BigDecimal(req.getTotalFee()).multiply(new BigDecimal(100)); fenBd = fenBd.setScale(0, BigDecimal.ROUND_HALF_UP); int money = fenBd.intValue();
这样就没出现元转分情况下丢失一分钱的问题了,真是前人埋坑后人填!需谨记不要犯常识型错误,特别是涉及到钱的。