问题描述
Gson 缺省以“忠于原文”的形式显示浮点数。
但有时候,这种格式可能很难看。比如 0.66666666666 显示一大块。
解决办法
注册一个自定义的 Double Serializer
Gson gson = new GsonBuilder()
.registerTypeAdapter(Double.class,
new JsonSerializer<Double>() {
@Override
public JsonElement serialize(Double value,
Type theType, JsonSerializationContext context) {
if (value.isNaN()) {
return new JsonPrimitive(0); // Convert NaN to zero
} else if (value.isInfinite() || value.doubleValue()<0.01) {
return new JsonPrimitive(value); // Leave small numbers and infinite alone
} else {
// Keep 2 decimal digits only
return new JsonPrimitive((new BigDecimal(value)).setScale(2, BigDecimal.ROUND_HALF_UP));
}
}
})
.create();
// 使用 testObject 测试我们的 serializer, testObject 可以自己编写
String json = gson.toJson(testObject);
System.out.println(json); // 打印美观格式的 json