SpringBoot 返回BigDecimal浏览器精度丢失

296 阅读1分钟

数据库存 9999999999999999 的时候 前端显示会变成100...... 原因是数据16位,浏览器那边会转换...

所以转为String处理即可。

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import org.springframework.boot.jackson.JsonComponent;

import java.io.IOException;
import java.math.BigDecimal;

/**
 * @description: BigDecimalToStringSerializer
 * @author: nice
 * @created: 2024/01/31 15:04
 */
@JsonComponent
public class BigDecimalToStringSerializer extends StdSerializer<BigDecimal> {
    public static final BigDecimalToStringSerializer instance = new BigDecimalToStringSerializer();

    public BigDecimalToStringSerializer() {
        super(BigDecimal.class);
    }

    @Override
    public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider provider) throws IOException {
        if (value == null) {
            gen.writeString("0.00");
        } else {
            String val = value.toPlainString();
            gen.writeString(val);
        }
    }

}

参考:

blog.csdn.net/A_art_xiang… blog.csdn.net/qq_40914968…