標籤:enc 科學 過程 spatial post請求 ref 字元 article 5.6
近期在工作中遇到個問題
通過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的問題了。
關於浮點數的json解析