含义:用来对超过16位有效位的数进行精确的运算
作用:一般常用于银行或计算要求高的
java.lang.Object
继承者 java.lang.Number
继承者 java.math.BigDecimal
字段摘要(不怎么常用)
构造方法摘要
常用构造方法:
BigDecimal(String val)
将 BigDecimal 的**数值**字符串表示形式转换为 BigDecimal
public class BigDecimalDemo {
public static void main(String[] args) {
//将数值字符串类型转为BigDecimal
BigDecimal bigDecimal = new BigDecimal("99.9");
System.out.println(bigDecimal);//99.9
//其它构造方法,比如把小数类型double转为BigDecimal
//【**其它数值**构造方法转BigDecimal不常用,因为本身就已经是数值了】
BigDecimal bigDecimal1 = new BigDecimal(99.9);
System.out.println(bigDecimal1);//99.900000000000005684341886080801486968994140625
}
}
方法摘要
常用方法:
方一
BigDecimal max(BigDecimal val)
两个BigDecimal 比较返回**最大**值
public class BigDecimalDemo {
public static void main(String[] args) {
//将数值字符串类型转为BigDecimal
BigDecimal bigDecimal = new BigDecimal("99.9");
System.out.println(bigDecimal);//99.9
BigDecimal bigDecimal1 = new BigDecimal("99.99");
System.out.println(bigDecimal1);//99.9
BigDecimal max = bigDecimal.max(bigDecimal1);
System.out.println(max);//99.99 最大值
}
}
方二
BigDecimal min(BigDecimal val)
两个BigDecimal 比较返回**最小**值
public class BigDecimalDemo {
public static void main(String[] args) {
//将数值字符串类型转为BigDecimal
BigDecimal bigDecimal = new BigDecimal("99.9");
System.out.println(bigDecimal);//99.9
BigDecimal bigDecimal1 = new BigDecimal("99.99");
System.out.println(bigDecimal1);//99.9
BigDecimal min = bigDecimal.min(bigDecimal1);
System.out.println(min);//99.9 最小值
}
}
方三
BigDecimal add(BigDecimal augend)
返回两个BigDecimal之**和**
public class BigDecimalDemo {
public static void main(String[] args) {
//将数值字符串类型转为BigDecimal
BigDecimal bigDecimal = new BigDecimal("99.9");
System.out.println(bigDecimal);//99.9
BigDecimal bigDecimal1 = new BigDecimal("99.99");
System.out.println(bigDecimal1);//99.9
BigDecimal add = bigDecimal.add(bigDecimal1);
System.out.println(add);//199.89 之和
}
}
方四
BigDecimal subtract(BigDecimal subtrahend)
返回两个BigDecimal之**差**
public class BigDecimalDemo {
public static void main(String[] args) {
//将数值字符串类型转为BigDecimal
BigDecimal bigDecimal = new BigDecimal("99.9");
System.out.println(bigDecimal);//99.9
BigDecimal bigDecimal1 = new BigDecimal("99.99");
System.out.println(bigDecimal1);//99.9
BigDecimal subtract = bigDecimal1.subtract(bigDecimal);
System.out.println(subtract);//0.09 之差
}
}
//【结果可为负】
方五
BigDecimal multiply(BigDecimal multiplicand)
返回两个BigDecimal之**积**
public class BigDecimalDemo {
public static void main(String[] args) {
//将数值字符串类型转为BigDecimal
BigDecimal bigDecimal = new BigDecimal("2.2");
System.out.println(bigDecimal);//2.2
BigDecimal bigDecimal1 = new BigDecimal("5.5");
System.out.println(bigDecimal1);//5.5
BigDecimal multiply = bigDecimal.multiply(bigDecimal1);
System.out.println(multiply);//12.10 之积
}
}
方六
BigDecimal divide(BigDecimal divisor)
返回两个BigDecimal之**除**
public class BigDecimalDemo {
public static void main(String[] args) {
//将数值字符串类型转为BigDecimal
BigDecimal bigDecimal = new BigDecimal("6.5");
System.out.println(bigDecimal);//6.5
BigDecimal bigDecimal1 = new BigDecimal("3.2");
System.out.println(bigDecimal1);//3.2
BigDecimal divide = bigDecimal.divide(bigDecimal1);
System.out.println(divide);//2.03125 之除
}
}
//【除不尽会报错:java.lang.ArithmeticException(算术异常)】
//为什么有这个错误,因为除不尽就底层就不知道用什么类型来接收所以会报错
方法多参,针对除不尽时四舍五入
BigDecimal divide(BigDecimal divisor,int 保留的位数,~~static修饰的字段四舍五入模式~~(这里被RoundingMode调用字段所取代类点的方式) )
public class BigDecimalDemo {
public static void main(String[] args) {
//将数值字符串类型转为BigDecimal
BigDecimal bigDecimal = new BigDecimal("7");
System.out.println(bigDecimal);//7
BigDecimal bigDecimal1 = new BigDecimal("3");
System.out.println(bigDecimal1);//3
BigDecimal divide = bigDecimal.divide(bigDecimal1, 2, RoundingMode.HALF_UP);
System.out.println(divide);//2.33 这里没有报ArithmeticException错误是因为设定保留两位并四舍五入了
}
}
方七
String toString()
把BigDecimal以字符串形式返回
public class BigDecimalDemo {
public static void main(String[] args) {
//将数值字符串类型转为BigDecimal
BigDecimal bigDecimal = new BigDecimal("8.8");
System.out.println(bigDecimal);//8.8
String string = bigDecimal.toString();//返回的字符串
System.out.println(string+100);//8.8100 【因为返回的是字符串,字符串在+号前所以做拼接】
}
}
备注:大多成员是没有static修饰的,所以需要对象点成员调用方式使用
谨记:开发中一般很少用小数类型float、double,对于小数或很大的值常用BigDecimal(精度更高)
建议:构造方法中的形参列表是数值字符串(只不过数值基本类型也能运行)