对象中BigDecimal值转换为JSON中精度丢失(出错)的问题解决方法

代码如下

1.定义一个包含BigDecimal类型的类

@Data
public class User {
    private String  name;
    private BigDecimal salary;
}

2.分别使用两种方法将对象转换为字符串


public class Demo {
    public static void main(String[] args) {
        User user = new User();
        user.setName("张三");
        user.setSalary(new BigDecimal(150.01));
        System.out.println("com.alibaba.fastjson转换结果"+com.alibaba.fastjson.JSONObject.toJSONString(user));
        System.out.println("net.sf.json.转换结果:"+net.sf.json.JSONObject.fromObject(user).toString());
    }
}

运行结果如下:

 

 我们可以明显的观察到数字在转换成字符串的时候精度发生了很大的变化,至于为什么会发生这种情况,有兴趣的人可以自行百度一下,我这边说一下如何解决这种方法

我们在定义这个类的时候需要对BigDecimal类型的值进行一下处理

处理方法:

public class User {
    private String  name;
    private BigDecimal salary;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public BigDecimal getSalary() {
        return salary.setScale(2,BigDecimal.ROUND_HALF_UP);
    }

    public void setSalary(BigDecimal salary) {
        this.salary = salary;
    }
}

 

最关键的部分:对BigDecimal保留相应的小数位setScale(2,BigDecimal.ROUND_HALF_UP);,我这边是保留了2位小数

这边保留方法是四舍五入的,可以参考相关博客

之后我们再看下转换后的结果:

 这边我没有使用别的JSON转换,所以不知道别的json在转换成字符串时候是否也可以用上面的方法解决该类的问题,结果不一致的小伙伴可以反馈一下哈

你可能感兴趣的:(Java工作的一些坑,Java拓展)