json转换导致金额失真问题解决

平台的余额查询逻辑中,今天爆了个雷。因平台用户都是较大的商户,且资金一般都是整数(这也是埋雷这么久的原因吧),但今天有客户说他们今天充值金额有个0.63的零头,但为何页面展示的账户余额零头却只是0.6?

debug跟了下代码,用测试数据貌似没有问题:

用了客户说的充值金额再试了下,不好了:

果然是把后面的3分钱吃了---虽然3分钱是小钱,但搞支付的哪怕1分钱都得明明白白才行!

项目引用的处理json的jar包是常用的net.sf.json:

        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
            <classifier>jdk15</classifier>
        </dependency>    

很明显,是源数据串转为json对象时,出现了数值格式的useableBanlance丢位失真,但字符格式的balance没有出问题!

没时间进去看源代码,直接重新引入fastjson:

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.31</version>
        </dependency>

然后将处理json的语句做了相应的方法变更,重新用客户的数据跑了一下,终于靠谱了:

果断换成fastjson,重新打包更新,把这个问题对付了过去。

接下来的工作:

1、清查所有json处理的相关代码,尽快完成jar包方法替换,最终摈弃net.sf.json,也许存在即真理,但我不想去证明这个真理了!

2、修改上游返回数据格式,为啥会出现同样的账户余额,一个用字符型,一个却用数值型?

原文地址:https://www.cnblogs.com/wujh88/p/9570591.html