BigDecimal类
- 一、前言
- 二、概述
- 1.API帮助文档
- 2.使用方法
- 三、常见方法
- 1.格式
- 2.实例
- 3.报错
- 4.解决方法
- 四、结语
一、前言
在使用float或者double类型的数据在进行数学运算的时候,很有可能会产生 精度丢失问题
我们都知道计算机底层在进行运算的时候,使用的都是二进制数据;
当我们在程序中写了一个十进制数据 ,在进行运算的时候,计算机会将这个十进制数据转换成二进制数据,然后再进行运算,计算完毕以后计算机会把运算的结果再转换成十进制数据给我们展示
如果我们使用的是整数类型的数据进行计算,那么在把十进制数据转换成二进制数据的时候不会存在精度问题;
如果我们的数据是一个浮点类型的数据,有的时候计算机并不会将这个数据完全转换成一个二进制数据,而是将这个将其转换成一个 无限的趋近于这个十进数的二进制数据
这样使用一个不太准确的数据进行运算的时候, 最终就会造成精度丢失
为了提高精度,Java就给我们提供了 BigDecimal 供我们进行数据运算
二、概述
1.API帮助文档
BigDecimal所在包是在java.math包下,因此在使用的时候就需要进行导包。我们可以使用BigDecimal类进行更加精准的数据计算。
2.使用方法
使用的时候就需要进行导包
三、常见方法
构造方法如图所示,接下来重点讲述成员方法
1.格式
public BigDecimal add(BigDecimal value) // 加法运算
public BigDecimal subtract(BigDecimal value) // 减法运算
public BigDecimal multiply(BigDecimal value) // 乘法运算
public BigDecimal divide(BigDecimal value) // 触发运算
2.实例
public class BigDecimalDemo01 {
public static void main(String[] args) {
// 创建两个BigDecimal对象
BigDecimal b1 = new BigDecimal("0.3") ;
BigDecimal b2 = new BigDecimal("4") ;
// 调用方法进行b1和b2的四则运算,并将其运算结果在控制台进行输出
System.out.println(b1.add(b2)); // 进行加法运算
System.out.println(b1.subtract(b2)); // 进行减法运算
System.out.println(b1.multiply(b2)); // 进行乘法运算
System.out.println(b1.divide(b2)); // 进行除法运算
}
}
输出结果
4.3
-3.7
1.2
0.075
3.报错
如果使用BigDecimal类型的数据进行除法运算的时候,得到的结果是一个无限循环小数,那么就会报错:ArithmeticException
public class BigDecimalDemo02 {
public static void main(String[] args) {
// 创建两个BigDecimal对象
BigDecimal b1 = new BigDecimal("1") ;
BigDecimal b2 = new BigDecimal("3") ;
// 调用方法进行b1和b2的除法运算,并且将计算结果在控制台进行输出
System.out.println(b1.divide(b2));
}
}
运行结果
4.解决方法
此时我们就需要使用到BigDecimal类中另外一个divide方法
//divisor: 除数对应的BigDecimal对象;
//scale: 精确的位数;
//roundingMode: 取舍模式;
BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
import java.math.BigDecimal;
import java.math.RoundingMode;
public class demo1 {
public static void main(String[] args) {
// 调用方法
method_03() ;
method_02() ;
method_01() ;
}
// 演示取舍模式HALF_UP
public static void method_03() {
// 创建两个BigDecimal对象
BigDecimal b1 = new BigDecimal("0.3") ;
BigDecimal b2 = new BigDecimal("4") ;
// 调用方法进行b1和b2的除法运算,并且将计算结果在控制台进行输出
System.out.println(b1.divide(b2 , 2 , RoundingMode.HALF_UP));
}
// 演示取舍模式FLOOR
public static void method_02() {
// 创建两个BigDecimal对象
BigDecimal b1 = new BigDecimal("1") ;
BigDecimal b2 = new BigDecimal("3") ;
// 调用方法进行b1和b2的除法运算,并且将计算结果在控制台进行输出
System.out.println(b1.divide(b2 , 2 , RoundingMode.FLOOR));
}
// 演示取舍模式UP
public static void method_01() {
// 创建两个BigDecimal对象
BigDecimal b1 = new BigDecimal("1") ;
BigDecimal b2 = new BigDecimal("3") ;
// 调用方法进行b1和b2的除法运算,并且将计算结果在控制台进行输出
System.out.println(b1.divide(b2 , 2 , RoundingMode.UP));
}
}
输出结果
0.08
0.33
0.34
四、结语
接下来将讲述时间类