• 关于浮点数的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的问题了。

  • 相关阅读:
    数字货币交易所数据标准格式
    Python3量化技术常用插件
    线上线下流量趋势
    数字货币做市技术——随机价格
    OKEX API v1 SDK基于 Python 实现
    CEOBI交易所接口文档
    递归拉取订单列表的方法
    XT交易所Websocket API
    XT交易所API
    获取合约日期
  • 原文地址:https://www.cnblogs.com/lytwajue/p/7244272.html
Copyright © 2020-2023  润新知