BigDecimal
为什么使用BigDecimal
由于浮点数采用二进制系统表示,而二进制无法精确的表示1/10,好比十进制无法精确表示1/3一样。因此,对于很多值浮点数都是采用其能够表示的离目标值近的数来表示,这有可能会在计算中带来不易察觉的误差。为了解决基本数据类型浮点数不能进行精确计算的问题,Java中专门提供了java.math.BigDecimal类,其提供浮点数的精确计算功能。
BigDecimal的用法1.加减乘除
2.设置精度
3.取反
加减乘除分别调用函数
举例:
BigDecimal a=new BigDecimal(10.0);
BigDecimal b=new BigDecimal(9.1);
System.out.println(a.subtract(b)); 精度设置,为什么会设置精度,给大家看个效果
代码如下:
BigDecimal abig=new BigDecimal(10.0);
BigDecimal bbig=new BigDecimal(9.1);
BigDecimal cbig=new BigDecimal(8.9);
System.out.println(abig.subtract(bbig));
System.out.println(abig.subtract(cbig)); 结果如下:
0.9000000000000003552713678800500929355621337890625
1.0999999999999996447286321199499070644378662109375 并不是我们希望看到的0.9和1.1,原因就是转成二进制的时候会有精度问题,导致这样的结果。所以我们可以在运算的时候加精度,也可以在实例化BigDecimal的时候用字符串。
设置精度的方法:
System.out.println(abig.subtract(bbig).setScale(2, BigDecimal.ROUND_HALF_UP));
System.out.println(abig.subtract(cbig).setScale(2, BigDecimal.ROUND_HALF_UP)); 这样设置两位精度就可以啦
0.90
1.10 字符串实例化的方法: BigDecimal abig=new BigDecimal("10.0");
BigDecimal bbig=new BigDecimal("9.1");
BigDecimal cbig=new BigDecimal("8.9"); 取反
因为Bigdecimal是无法直接用+-*/这些符号进行计算的,所以取反的时候也需要一个单独的方法来实现:
System.out.println(abig.negate()); 这样就会拿到它的相反数了:
465

被折叠的 条评论
为什么被折叠?



