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、修改上游返回数据格式,为啥会出现同样的账户余额,一个用字符型,一个却用数值型?
json转换导致金额失真问题解决的更多相关文章
- ELK系列~Nxlog日志收集加转发(解决log4日志换行导致json转换失败问题)
本文章将会继承上一篇文章,主要讲通过工具来进行日志的收集与发送,<ELK系列~NLog.Targets.Fluentd到达如何通过tcp发到fluentd> Nxlog是一个日志收集工具, ...
- Jackson框架,json转换
Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json.xml转换成Java对象. 前面有介绍过json-lib这个框架,在线博文:http://www.cnblo ...
- json转换对象中出现null属性的解决方法
前言:当数据进行json转换时,当属性值为null时,json解析就会中断,导致接下来的数据无法正确获取.原则上来讲服务器端发送的json字符串不允许存在属性值为空的情况,但是如果服务器端发送了nul ...
- 关于json 转换BigDecimal精度丢失问题
今天在转换一个关于金额字段发现一个关于json转换的bug 目前尚未深入观察 问题: 如果金钱为bigdecimal json转换后不会丢失精度 但是通过@responsebody 返回到前端后发现 ...
- postman设置环境变量,字段值经过json转换后数值字节长度超过上限的问题
在使用Tests进行环境变量的设置时,遇到这么一种情况,在返回的responseBody中的userId字段,字段返回的是数值类型,再经过json转换之后,发现保存的值跟接口返回的值不一致:如下图: ...
- ORACLE绑定变量隐式转换导致性能问题
年后一次系统升级后,监控数据库的工具DPA发现数据库的Total Wait时间突然飙增,如下截图所示,数据库的总体等待时间对比升级前飙增了非常多 另外就是发现出现了较多的等待事件,主要有latch: ...
- json转换成对象
在json转换成对象时,json的key会与java 类的字段一一对应.如果没有映射上的java字段会在该数据类型上填充默认值,如int 0,String null 等. 没有映射的json key在 ...
- Json转换利器Gson之实例一-简单对象转化和带泛型的List转化 (转)
Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库.可以将一个 JSON 字符串转成一个 Java 对象,或者反过来. jar和源码下载地址: h ...
- json转换数据后面参数要带ture,代码
强大的PHP已经提供了内置函数:json_encode() 和 json_decode().很容易理解,json_encode()就是将PHP数组转换成Json.相反,json_decode()就是将 ...
随机推荐
- Do-Now—团队冲刺博客四
各个成员今日完成的任务 侯泽洋:完成奖励页面设计,完成奖励从云端拉取到本地:完成奖励从云端拉取到本地 周亚杰:冲刺博客,个人中心设计(未完成) 王志伟:积分页面设计:积分页面设计 仇夏:树苗成长过程设 ...
- Java 多线程 sleep()方法与yield()方法的区别
sleep()方法与yield()方法的区别如下: 1 是否考虑线程的优先级不同 sleep()方法给其他线程运行机会时不考虑线程的优先级,也就是说,它会给低优先级的线程运行的机会.而yield()方 ...
- vue_源码 原理 剖析
相关基础知识点 // 可以让 任意函数/方法 成功临时指定成对象的方法进行调用 - call/apply // 1. 根据伪数组生成 真数组 const lis = document.getEleme ...
- pycharm的一些快捷键
[转]pycharm的一些快捷键 忙了好一阵终于忙完了,最近在重构代码,有许多地方要注释什么的,在多行注释时总是很麻烦,就想着pycharm有没有快捷键,就像visual studio一样.于是上Go ...
- Python 在cmd中import模块成功,但是在jupyter notebook中No module xxx found
由于需要用到python中的某个库,因此打开命令行窗口cmd,然后使用pip安装.安装成功后,在cmd中输入python调出python环境,import该模块并使用,可以正常使用.但是打开juypt ...
- JavaFTP文件传输上传和下载文件
首先在电脑上创建一个ftp服务器,具体步骤自行百度. 接下来开始写有用的java连接TFP站点和传输文件的代码. 1.首先jar用的是apache 的工具包 请自行下载 . 2.俩个文件代码 一个Ft ...
- 遍历文件后缀名 为 .java的文件
import java.io.File; import java.io.FileFilter; //创建一个功夫类继承文件管理类 public class FileFu implements Fil ...
- Mac 比较实用的软件
解压缩 BetterZip 系统 CleanMyMac Quicksilver Alfred3 视频 Movist
- 01背包 || BZOJ 1606: [Usaco2008 Dec]Hay For Sale 购买干草 || Luogu P2925 [USACO08DEC]干草出售Hay For Sale
题面:P2925 [USACO08DEC]干草出售Hay For Sale 题解:无 代码: #include<cstdio> #include<cstring> #inclu ...
- 一码阻塞,万码等待:ASP.NET Core 同步方法调用异步方法“死锁”的真相
在我们 2015 年开始的从 .NET Framework 向 .NET Core 迁移的工程中,遇到的最大的坑就是标题中所说的--同步方法中调用异步方法发生"死锁".虽然在 .N ...