fastjson double丢失精度
时间: 2023-09-03 21:07:08 浏览: 176
fastjson 在默认情况下会对 double 类型进行科学计数法的序列化,这会导致一些精度的丢失。解决方法有以下两种:
1. 自定义序列化方式,将 double 类型转换为字符串进行序列化,避免科学计数法的使用。示例代码如下:
```java
public class DoubleSerializer implements ObjectSerializer {
public static final DoubleSerializer instance = new DoubleSerializer();
@Override
public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
SerializeWriter out = serializer.getWriter();
if (object == null) {
out.writeNull();
return;
}
double value = ((Double) object).doubleValue();
String doubleStr = Double.toString(value);
out.writeString(doubleStr);
}
}
```
然后在序列化时指定使用自定义的序列化方式:
```java
SerializeConfig config = new SerializeConfig();
config.put(Double.class, DoubleSerializer.instance);
String json = JSON.toJSONString(obj, config);
```
2. 在序列化时指定使用精度较高的序列化方式,避免科学计数法的使用。示例代码如下:
```java
SerializeWriter out = new SerializeWriter();
JSONSerializer serializer = new JSONSerializer(out);
serializer.config(SerializerFeature.WriteBigDecimalAsPlain, true);
serializer.write(obj);
String json = out.toString();
out.close();
```
这种方式会将 BigDecimal 类型序列化为字符串,避免科学计数法的使用,从而避免了精度的丢失。
阅读全文