zoukankan      html  css  js  c++  java
  • 关于浮点数的json解析

    近期在工作中遇到个问题

    通过post请求从其他系统(好像是C#写的)获得json字符串

    {"geometry":{"rings":[[[40426489.331430912,3001752.0858958033],[40426225.692211367,3001750.0779145896],[40426202.957955509,3001594.0301330695],[40426290.959128119,3001559.0584689],[40426390.723533183,3001537.0470353812],[40426464.66273,3001645.3116807956],[40426489.331430912,3001752.0858958033]]],"spatialReference":{"wkid":2364}},"succeed":true,"msg":""}

    然后在我的系统(java写的)中进行json解析,

    開始用的json lib 2.4进行解析

    得到的json对象,然后在通过这个json对象去计算面积,怎么都不正确。后来分析了一下解析后的代码

    {"rings":[[[4.0426488E7,3001752],[4.0426224E7,3001750],[4.0426204E7,3001594],[4.0426292E7,3001559],[4.0426392E7,3001537],[4.0426464E7,3001645.2],[4.0426488E7,3001752]]],"spatialReference":{"wkid":2364}}

    发现原来的 40426489.331430912,3001752.0858958033

    变成了 4.0426488E7,3001752

    这个差太远,小数部分所有丢失了

    后面我的解决的方法是:不要这个json解析过程,直接对json字符串进行split,然后得到我想要的部分,然后再请求服务计算面积。

    这个问题尽管攻克了,但我一直没弄明确json lib解析为什么会这样,我原以为是c#和java对浮点数的处理不同引起的。

    我又试了网上几个经常使用的json解析包

    Gson,smartJSON

    解析出来的结果都是

    {"rings":[[[4.042648933143091E7,3001752.0858958033],[4.042622569221137E7,3001750.0779145896],[4.042620295795551E7,3001594.0301330695],[4.042629095912812E7,3001559.0584689],[4.042639072353318E7,3001537.047035381],[4.042646466273E7,3001645.3116807956],[4.042648933143091E7,3001752.0858958033]]],"spatialReference":{"wkid":2364}}

    尽管用的也是科学计数法,可是精度没损失

    看来是json lib的问题了。

  • 相关阅读:
    mysql密码重置
    利用python生成定制二维码
    totnado前后端分离跨域设置
    supervisor详解
    redis持久化常识和配置
    redis数据的备份与恢复
    supervisor下更换源文件报错
    EF5框架封装
    IEnumerable和IEnumerator 详解
    心宽,路自宽
  • 原文地址:https://www.cnblogs.com/lytwajue/p/7244272.html
Copyright © 2011-2022 走看看