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

使用Gson反序列化JSON时出现小数精度丢失问题

Gson反序列化Float丢失精度问题解答

这个问题很多开发者都遇到过,核心原因是Float类型的精度限制:

  • Float是32位单精度浮点数,有效精度仅为6-7位。你示例中的数值2752293.58整数部分已经有7位,小数部分的精度无法被Float准确存储,因此会被近似为2752293.5,这是Java基本类型的特性,并非Gson的Bug。

解决方案

  1. 替换字段类型为Double
    Double是64位双精度浮点数,有效精度可达15-16位,完全能容纳2752293.58这类数值,修改后的代码如下:

    public class GsonTest {
        class A {
            Double v;
        }
    
        public static void main(String[] args) {
            Gson gson = new Gson();
            String aStr = "{ v:2752293.58 }";
    
            A a = gson.fromJson(aStr, A.class);
            System.out.println(a.v); // 输出预期的2752293.58
        }
    }
    
  2. 若必须使用Float(仅针对显示需求)
    如果业务场景强制要求用Float,只能在输出时对数值进行格式化处理,但这只是优化显示效果,实际存储的仍是近似值,示例代码:

    System.out.printf("%.2f", a.v); // 格式化输出为2752293.58
    

内容的提问来源于stack exchange,提问作者jack jin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 13:30:59