关于BigDecimal
BigDecimal有两部分组成,an arbitrary precision integer unscaled value和a 32-bit integer scale
其中关于scale就是小数点后面数字的位数,例如1.1234567,则scale=7,unscaled value为有效数字位数,这里unscaled value=11234567,有如下代码:
String a="-0.1234567890";
BigDecimal bigDecimal=new BigDecimal(a);
System.out.println(bigDecimal.scale());
System.out.println(bigDecimal.unscaledValue());
其输出结果为:
10
-1234567890
因此BigDecimal可以表示为unscaledValue × 10-scale
我们在构造BigDecimal对象时,应尽量使用字符串构建,请看如下代码:
BigDecimal floatValue=new BigDecimal(0.1);
BigDecimal stringValue=new BigDecimal("0.1");
System.out.println(floatValue.toString());
System.out.println(stringValue.toString());
其结果如下:
0.1000000000000000055511151231257827021181583404541015625
0.1
因为我们使用float构造BigDecimal对象时,实际上我们并不能用float构造一个精确的值,而采用字符串时就可以避免这个问题。