BigDecimal类
- 思考:以下程序输出的结果是多少?
public class Demo03 {
public static void main(String[] args) {
double a = 1.0 ;
double b = 0.9 ;
System.out.println(a-b);
// 面试题
double result = (1.4-0.5)/0.9 ;
System.out.println(result);
}
}
运行结果:
0.09999999999999998
0.9999999999999999
double是近似值存储,所以存在一些精度的偏差。而在很多实际应用中需要精确的运算,这就需要BigDecimal
位置、作用、创建方式
- 位置:java.math包中
- 作用:精确计算浮点数
- 创建方式
BigDecimal bd = new BigDeimal("1.0");
实例操作
public class Demo03 {
public static void main(String[] args) {
// 这里BigDeimal一定要选择字符串
BigDecimal bigDecimal = new BigDecimal("1.0");
BigDecimal bigDecima2 = new BigDecimal("0.9");
// 减法
BigDecimal r1 = bigDecimal.subtract(bigDecima2);
System.out.println(r1);
// 加法
System.out.println(bigDecimal.add(bigDecima2));
// 乘法
System.out.println(bigDecimal.multiply(bigDecima2));
// 除法
BigDecimal r2 = new BigDecimal("1.4")
.subtract(new BigDecimal("0.5"))
.divide(new BigDecimal("0.9"));
System.out.println(r2);
BigDecimal r3 = new BigDecimal("10")
.divide(new BigDecimal("3"),1);
System.out.println(r3);
}
}
运行结果:
0.1
1.9
0.90
1
3
在使用BigDeimal时,使用除法除不尽时,会报错,这时需要指定保留的位数和取舍方式