使用Gson反序列化JSON时出现小数精度丢失问题
Gson反序列化Float丢失精度问题解答
这个问题很多开发者都遇到过,核心原因是Float类型的精度限制:
- Float是32位单精度浮点数,有效精度仅为6-7位。你示例中的数值
2752293.58整数部分已经有7位,小数部分的精度无法被Float准确存储,因此会被近似为2752293.5,这是Java基本类型的特性,并非Gson的Bug。
解决方案
替换字段类型为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 } }若必须使用Float(仅针对显示需求)
如果业务场景强制要求用Float,只能在输出时对数值进行格式化处理,但这只是优化显示效果,实际存储的仍是近似值,示例代码:System.out.printf("%.2f", a.v); // 格式化输出为2752293.58
内容的提问来源于stack exchange,提问作者jack jin
相关产品推荐
相关产品推荐

