目录
BigDecimal 类
一、为什么需要BigDecimal类
先看代码
public class Test {
public static void main(String[] args) {
double num1 = 1.0;
double num2 = 0.9;
System.out.println(num1-num2);
}
}
运行结果
0.09999999999999998
原因:double和float在内存中存的是近似值,经过一系列运算后,结果会出现误差。需要高精度时,引入BigDecimal类。
二、使用
BigDecimal bd = new BigDecimal("1.0");
三、BigDecimal类中的几个方法
1.add()加法
public BigDecimal add(BigDecimal augend)
功能:两个BigDecimal类型相加。
代码示例
BigDecimal bd = new BigDecimal("1.0");
BigDecimal bd1 = new BigDecimal("0.9");
BigDecimal end = bd.add(bd1);
System.out.println("bd + bd1 =\t"+end);
//运行结果
bd + bd1 = 1.9
2.subtract()减法
public BigDecimal subtract(BigDecimal subtrahend)
功能:两个BigDecimal类型相减。
代码示例
BigDecimal bd = new BigDecimal("1.0");
BigDecimal bd1 = new BigDecimal("0.9");
BigDecimal end = bd.subtract(bd1);
System.out.println("bd + bd1 =\t"+end);
//运行结果
bd - bd1 = 0.1
3. multiply()乘法
public BigDecimal multiply(BigDecimal multiplicand)
功能:两个BigDecimal类型相乘。
代码示例
BigDecimal bd = new BigDecimal("1.0");
BigDecimal bd1 = new BigDecimal("0.9");
BigDecimal end = bd.multiply(bd1);
System.out.println("bd * bd1 =\t"+end);
//运行结果
bd * bd1 = 0.90
4. divide()除法
public BigDecimal divide(BigDecimal divisor)
public BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
//参数scale为精确小数点后几位,
mode指小数的取舍模式,一般四舍五入,为BigDecimal.ROUND_HALF_UP
功能:两个BigDecimal类型相除。
注意:如果两数不能整除,则会报ArithmeticException异常,需要进行 保留小数 四舍五入。参数mode
代码示例
BigDecimal bd2 = new BigDecimal("1.0");
BigDecimal bd3 = new BigDecimal("1.0");
end = bd2.divide(bd3);
System.out.println("bd2 / bd3 =\t"+end);
// 保留小数2位数 四舍五入
BigDecimal bd = new BigDecimal("1.0");
BigDecimal bd1 = new BigDecimal("0.9");
BigDecimal end = bd.end = bd.divide(bd1,2,BigDecimal.ROUND_HALF_UP);
System.out.println("bd2 / bd3 =\t"+end);
//运行结果
bd2 / bd3 = 1
bd2 / bd3 = 1.11
四、代码汇总
import java.math.BigDecimal;
public class Test {
public static void main(String[] args) {
double num1 = 1.0;
double num2 = 0.9;
System.out.println(num1-num2);
BigDecimal bd = new BigDecimal("1.0");
BigDecimal bd1 = new BigDecimal("0.9");
BigDecimal end = bd.add(bd1);
System.out.println("bd + bd1 =\t"+end);
end = bd.subtract(bd1);
System.out.println("bd - bd1 =\t"+end);
end = bd.multiply(bd1);
System.out.println("bd * bd1 =\t"+end);
BigDecimal bd2 = new BigDecimal("1.0");
BigDecimal bd3 = new BigDecimal("1.0");
end = bd2.divide(bd3);
System.out.println("bd2 / bd3 =\t"+end);//ArithmeticException
end = bd.divide(bd1,2,BigDecimal.ROUND_HALF_UP);
System.out.println("bd2 / bd3 =\t"+end);
}
}
运行结果
0.09999999999999998
bd + bd1 = 1.9
bd - bd1 = 0.1
bd * bd1 = 0.90
bd2 / bd3 = 1
bd2 / bd3 = 1.11
Process finished with exit code 0