Android:如何用Java从JSONObject中将大数字转为字符串
解决JSON数值读取时的科学计数法显示问题
问题分析
当从JSON中读取较大数值(如4000000)时,JSONObject.getString()会自动将其转换为科学计数法格式(如4.0E+6),即使转成BigDecimal后调用toString(),仍可能保留这种格式,导致无法原样显示数值。
解决方案
核心思路是使用BigDecimal.toPlainString()方法替代toString(),该方法会返回纯十进制格式的字符串,不会使用科学计数法。同时增加类型判断,兼容字段为数值或字符串的情况:
private AttrsSiparis parseSiparisBilgisi(String data) { AttrsSiparis siparisBilgileri = new AttrsSiparis(); try { JSONArray jsonArray = new JSONArray(data); for(int i = 0; i < jsonArray.length(); i++) { JSONObject obj = jsonArray.getJSONObject(i); Object fieldValue = obj.get("STHAR_GCMIK"); String miktar; if (fieldValue instanceof Number) { // 处理数值类型,转BigDecimal后用toPlainString()避免科学计数法 miktar = new BigDecimal(fieldValue.toString()).toPlainString(); } else { // 处理字符串类型,直接取值 miktar = obj.getString("STHAR_GCMIK"); } Log.i(Constants.TAG, "Irsaliye Result Parse : STHAR_GCMIK " + miktar); siparisBilgileri.miktarlar.add(miktar); } } catch (JSONException e) { e.printStackTrace(); return null; } return siparisBilgileri; }
关键说明
toPlainString():BigDecimal的该方法专门用于生成无科学计数法的字符串表示,无论数值大小都会以普通十进制形式输出。- 类型判断:先获取字段的原始
Object类型,区分数值和字符串场景,避免直接调用getString()导致的格式转换问题。
内容的提问来源于stack exchange,提问作者Samet Topal
相关产品推荐
相关产品推荐

