关于BigDecimal

关于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构造一个精确的值,而采用字符串时就可以避免这个问题。

猜你喜欢

转载自blog.csdn.net/u010999240/article/details/52389892
今日推荐