使用BigDecimal进行精确计算

首先我们先来看如下代码示例:

public class Test_1 {
2     public static void main(String[] args) {
3         System.out.println(0.06+0.01);
4         System.out.println(1.0-0.42);
5         System.out.println(4.015*100);
6         System.out.println(303.1/1000);
7     }  
9 }

运行结果如下。
         0.06999999999999999
         0.5800000000000001
         401.49999999999994
         0.30310000000000004

因为计算机是二进制的,我们的浮点型无法精确的用二进制表示(2.4的二进制表示并非就是精确的2.4。反而最为接近的二进制表示是 2.3999999999999999

在使用BigDecimal类来进行计算的时候,主要分为以下步骤:

          1. 用float或者double变量构建BigDecimal对象。
         2. 通过调用BigDecimal的加,减,乘,除等相应的方法进行算术运算。
         3. 把BigDecimal对象转换成float,double,int等类型。

创建BigDecimal对象的方法:

1 BigDecimal b1 = new BigDecimal(Double.toString(0.48));
2 BigDecimal b2 = BigDecimal.valueOf(0.48);

常用计算方法:

1 public BigDecimal add(BigDecimal value);                        //加法
2 public BigDecimal subtract(BigDecimal value);                   //减法 
3 public BigDecimal multiply(BigDecimal value);                   //乘法
4 public BigDecimal divide(BigDecimal value);                     //除法

BigDecimal对象转换成相应的基本数据类型
double d=b1.doubleValue();
float f=b1.floatValue();

除法

b1.divide(b2)       如果不能除尽则会报错
b1.divide(b2,int scale,int roundingMode)
    scale------小数点后面保留几位数
    roundingMode -----舍入模式,对保留小数的后一位的操作
    0——ROUND_UP     绝对值加1
    1——ROUND_DOWN   绝对值减1
    2——ROUND_CEILING  向上加1
    3——ROUND_FLOOR   向下减1
    4——ROUND_HALF_UP
    5——ROUND_HALF_DOWN
    6——ROUND_HALF_EVEN
    7——ROUND_UNNECESSARY
b1.divide(b2,int scale,RoundingMode  roundingMode)

你可能感兴趣的:(使用BigDecimal进行精确计算)