org.json.JSONObject.getLong gives imprecise result

2019-02-19 09:42发布

问题:

In android, as we can see attached figure, the json that I received from server is "id=-7051563524465472446" but the code jsonObject.getLong("id") gives -7051563524465472512.

I can see every getLong conversion has imprecise result(or lose precision?) in last 4 digits. Is there anything that I missed?

My settings: java 1.6.0_41, Android 4.1.2, IntelliJ 12 IDE.

回答1:

Long.parseLong(jsonObject.getString("id")) gives precise result.



回答2:

This would suggest the code for getLong() is doing some dubious conversion, possibly by using double.

This looks to be the case based on this issue report. Looks to have been fixed in a later version.



回答3:

I too faced this problem very recently.. Solved it by using the code:

Long.valueOf(jarray.getString((index)))