You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 16:03:40