今天在敲代码的时候遇到了一个BigDecimal的问题,代码如下:
Test testa;
Test testb = com.alibaba.fastjson.JSON.parseObject(string1, Test.class);
if(testa.equals(testb)){
return true;
}
testa和testb都是一样的参数,其中有一个参数是BigDecimal类型的,testa里值为0.005,testb经过Json转换后值为0.0050,末尾多了一个0。
万思不得其解
查看源码后才知道,原来BigDecimal的默认构造方法是如果你不指定传入的数字类型,默认是double类型,此时就已经出现了精度问题了。但是我这是在json字符串里面传的值,让上游改比较麻烦,所以我利用到BigDecimal.stripTrailingZeros()方法去除末尾多余的0。当然这里是我是知道传入BidDecimal的值是double类型的,如果你不能确定你传入的数是整数还是浮点数,那还是用正则表达式去掉吧。
解决方法:
testb.setData(testb.getData().stripTrailingZeros());
或者正则表达式
testb.setData(testb.getData().replaceAll("0+?$", ""));