金额元转分精度丢失问题

    技术2022-07-10  135

            处理之前人遗留的问题,在某些金额场景下会少一分钱,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();

     

    这样就没出现元转分情况下丢失一分钱的问题了,真是前人埋坑后人填!需谨记不要犯常识型错误,特别是涉及到钱的。

    Processed: 0.010, SQL: 9