關於浮點數的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的問題了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM