当前位置: 首页 > news >正文

刚做的网站上线后收不到了/泉州全网营销优化

刚做的网站上线后收不到了,泉州全网营销优化,网站外链是什么,网站起域名原则这里写自定义目录标题问题发现Demo验证分析经验JSONObject为Android系统中的org.json.JSONObject。 问题发现 review代码时,看到一个提交记录,修复了JSONObject optLong丢失精度的问题。 更改前为 long id jsonObject.optLong(idKey)更改后为 long i…

这里写自定义目录标题

  • 问题发现
  • Demo验证
  • 分析
  • 经验

JSONObject为Android系统中的org.json.JSONObject。

问题发现

review代码时,看到一个提交记录,修复了JSONObject optLong丢失精度的问题。
更改前为

long id = jsonObject.optLong(idKey)

更改后为

    long id = optLong(jsonObject, idKey)private long optLong(JSONObject jsonObject, String key) {try {return Long.valueOf(jsonObject.optString(key));} catch (NumberFormatException e) {e.printStackTrace();}return jsonObject.optLong(key);}

解析的是服务端下发的json数据,为何JSONObject.optLong()会丢失精度呢?

Demo验证

写个demo测了下

		val jsonObj = JSONObject()jsonObj.put("long_str", (Long.MAX_VALUE -1).toString()) // 注意这里!!!Log.e("sss", "$jsonObj") val doubleValue = jsonObj.optDouble("long_str")val longValue = jsonObj.optLong("long_str")val longFromString = getLongFromStr(jsonObj)Log.e("sss", "$longValue $longFromString ${longValue == longFromString} $doubleValue")

其中,getLongFromStr 为

private fun getLongFromStr(jsonObj: JSONObject): Long {try {return jsonObj.optString("long_str").toLong()} catch (e: NumberFormatException) {e.printStackTrace()}return jsonObj.optLong("long_str")}

看下输出结果:

E/sss: {"long_str":"9223372036854775806"}
E/sss: 9223372036854775807 9223372036854775806 false 9.223372036854776E18

!!!! 通过optString方式取的值是对的,通过optLong方式取的值却是错的!!!
但如果简单改下demo

        val jsonObj = JSONObject()jsonObj.put("long_str", Long.MAX_VALUE -1) // 改动点Log.e("sss", "$jsonObj")val doubleValue = jsonObj.optDouble("long_str")val longValue = jsonObj.optLong("long_str")val longFromString = getLongFromStr(jsonObj)Log.e("sss", "$longValue $longFromString ${longValue == longFromString} $doubleValue")

输出结果却是:

E/sss: {"long_str":9223372036854775806}
E/sss: 9223372036854775806 9223372036854775806 true  9.223372036854776E18

!!!optString()和optLong()两种方法取的值都是对的!!!

分析

看下JSONObject的optLong()方法

    public long optLong(@Nullable String name, long fallback) {Object object = opt(name);Long result = JSON.toLong(object);return result != null ? result : fallback;}

内部是通过JSON.toLong()方法实现的

    static Long toLong(Object value) {if (value instanceof Long) {return (Long) value;} else if (value instanceof Number) {return ((Number) value).longValue();} else if (value instanceof String) {try {return (long) Double.parseDouble((String) value);} catch (NumberFormatException ignored) {}}return null;}

如果Object为Long的话,直接走第一个if分支,不存在精度损失;
如果Object为String的话,走第三个if分支,先将String类型的数解析成双精度浮点型,再转成Long型,这就可能造成精度丢失,具体原因可参考float,double等精度丢失问题

经验

在做JSON构造和解析时,应确定好数据格式,避免出现数据丢失的情况。对于客户端而言,JSON解析时,数据类型可以统一先转成String,再做String到相应数据类型的转换处理。

http://www.jmfq.cn/news/5262139.html

相关文章:

  • 邢台哪里有做网站的/seo技术分享
  • 百度站长工具添加不了站点/网络营销课程总结
  • angularjs 网站开发/企业网站多少钱一年
  • 海淀做网站哪家公司好/360收录查询
  • 网页字体网站/网络宣传推广方法
  • 免费制作logo的软件有哪些/seo顾问服
  • 网站建设需要什么技术/怎样做网站
  • 网站数据分析视频/沈阳关键词seo排名
  • 北京西站停车场收费标准/快手刷粉网站推广
  • 龙岩做网站龙岩网页设计/百度教育官网
  • 网站日历插件/seo包年优化费用
  • 服务器怎样做网站呢/广东优化疫情防控措施
  • 河北企业建网站/网站建设的一般步骤
  • jquery 做网站/百度统计api
  • 东营网站建设培训学校/舆情管理
  • 做公司网站都需要什么资料/跨境电商平台注册开店流程
  • 做网站的股哥/运营seo是什么意思
  • 网站跟app的区别/中公教育培训机构官网
  • 做网站公司的出路/百度知道合伙人官网登录入口
  • 广东外贸网站开发/seo算法优化
  • 小型网站设计及建设论文范本/培训中心
  • 永兴网站开发/网页制作培训网站
  • 抖音视频添加小程序怎么赚钱/武汉seo招聘
  • 网站建设开发合同模板/宣传推广方案范文
  • 找人建设一个网站大概需要多少费用/网站建设规划要点详解
  • 网站建设公司怎么找业务/重庆企业网站排名优化
  • 网络营销与策划实践报告/长沙网站优化公司
  • 卡盟做网站/seo是什么缩写
  • 网站文章百度快照怎么做/免费投放广告的平台
  • 网站的内容与功能设计/2020年可用好用的搜索引擎