文章目录
BigDecimal 常用方法
1.初始化BigDecimal
// 初始化BigDecimal,推荐使用字符串创建BigDecimal对象
public BigDecimal(String val) {};
public BigDecimal(double val) {};
public BigDecimal(int val) {};
public BigDecimal(long val) {};
2.创建BigDecimal对象
// String
BigDecimal decimalExample1 = new BigDecimal("1000");
BigDecimal decimalExample2 = new BigDecimal("20");
BigDecimal decimalExample3 = new BigDecimal("42834");
BigDecimal decimalExample4 = new BigDecimal("412");
BigDecimal decimalExample5 = new BigDecimal("-3413.9654");
// double
BigDecimal decimalExample6 = new BigDecimal(312.438);
// int
BigDecimal decimalExample7 = new BigDecimal(5438);
// Long
BigDecimal decimalExample8 = new BigDecimal(756840324023L);
3.BigDecimal类中定义好的常量
BigDecimal zeroDecimal = BigDecimal.ZERO;
BigDecimal oneDecimal = BigDecimal.ONE;
BigDecimal tenDecimal = BigDecimal.TEN;
BigDecimal negateOneDecimal = BigDecimal.ONE.negate();
BigDecimal negateTenDecimal = BigDecimal.TEN.negate();
System.out.println("当前值zeroDecimal:" + zeroDecimal);
System.out.println("当前值oneDecimal:" + oneDecimal);
System.out.println("当前值tenDecimal:" + tenDecimal);
System.out.println("当前值negateOneDecimal:" + negateOneDecimal);
System.out.println("当前值negateTenDecimal:" + negateTenDecimal);
输出结果:
4.BigDecimal 值之间的转换
double doubleValue = decimalExample6.doubleValue(); // 将BigDecimal转换成double
int intVal = decimalExample7.intValue(); // 将BigDecimal转换成int
long longValue = decimalExample8.longValue(); // 将BigDecimal转换成long
5.取当前值的相反数、绝对值、幂函数、保留数值的精度
// 取当前值的相反数
BigDecimal negateDecimal = decimalExample1.negate();
System.out.println("取当前值的相反数:negateDecimal:" + negateDecimal);
// 取当前值的绝对值
BigDecimal absDecimal = decimalExample5.abs();
System.out.println("取当前值的绝对值:absDecimal:" + absDecimal);
// 求幂函数
BigDecimal powVal = decimalExample2.pow(2); // 20的2次方
System.out.println("求幂函数:powVal:" + powVal);
// 设置当前数值的精度
// 常用的保留小数的方式 :
// RoundingMode.HALF_UP:小数位进行四舍五入
// RoundingMode.HALF_DOWN:小数位五舍六入
BigDecimal scaleDecimal = decimalExample5.setScale(2, RoundingMode.HALF_UP);
System.out.println("设置当前数值的精度:scaleDecimal:" + scaleDecimal);
6.BigDecimal之间的运算:加减乘除方法
// 两数相加
BigDecimal addDecimal = decimalExample1.add(decimalExample2);
System.out.println("两数相加 addDecimal:decimalExample1 + decimalExample2 :" + addDecimal);
// 两数相减
BigDecimal subtractDecimal = decimalExample1.subtract(decimalExample2);
System.out.println("两数相减 subtractDecimal:decimalExample1 - decimalExample1 :" + subtractDecimal);
// 两数相乘
BigDecimal multiplyDecimal = decimalExample1.multiply(decimalExample2);
System.out.println("两数相乘 multiplyDecimal :decimalExample1 * decimalExample1 :" + multiplyDecimal);
// 两数相除
BigDecimal divideDecimal = decimalExample1.divide(decimalExample2);
System.out.println("两数相除 divideDecimal :decimalExample1 / decimalExample1 :" + divideDecimal);
7.两数相除保留精度
BigDecimal scaleHalfUpDecimal = decimalExample3.divide(decimalExample4, 5, RoundingMode.HALF_UP);
BigDecimal scaleHalfDownDecimal = decimalExample3.divide(decimalExample4, 6, RoundingMode.HALF_DOWN);
System.out.println("两数相除保留向上四舍五入保留5位精度:" + scaleHalfUpDecimal);
System.out.println("两数相除保留向下五舍六入保留6位精度:" + scaleHalfDownDecimal);
8.toString、toPlainString方法
1)toString: 对于过小或过大的数值,会转换成科学计数法表示,一般太小的小数会转换成科学计数法
2)toPlainString: 所有数值都以十进制展示,可以把科学计数法表示的数值转换成十进制数值
BigDecimal decimal1 = new BigDecimal("9809742523");
// BigDecimal的 toString方法 对于正数一般不会转换成科学计数法
BigDecimal decimal2 = new BigDecimal("5990000000000000000000000000000");
// BigDecimal的 toString方法 对于过长的小数会转换成科学计数法的形式
BigDecimal decimal3 = new BigDecimal("-0.00000000000000000031236834");
BigDecimal decimal4 = new BigDecimal("0.00000000097831236834");
BigDecimal decimal5 = new BigDecimal("9.931E12");
BigDecimal decimal6 = new BigDecimal("-6.752E-9");
System.out.println("toString方法输出 decimal1 结果:" + decimal1.toString());
System.out.println("toString方法输出 decimal2 结果:" + decimal2.toString());
System.out.println("toString方法输出 decimal3 结果:" + decimal3.toString());
System.out.println("toString方法输出 decimal4 结果:" + decimal4.toString());
System.out.println("toString方法输出 decimal5 结果:" + decimal5.toString());
System.out.println("toString方法输出 decimal6 结果:" + decimal6.toString());
System.out.println("toPlainString方法输出 decimal1 结果:" + decimal1.toPlainString());
System.out.println("toPlainString方法输出 decimal2 结果:" + decimal2.toPlainString());
System.out.println("toPlainString方法输出 decimal3 结果:" + decimal3.toPlainString());
System.out.println("toPlainString方法输出 decimal4 结果:" + decimal4.toPlainString());
System.out.println("toPlainString方法输出 decimal5 结果:" + decimal5.toPlainString());
System.out.println("toPlainString方法输出 decimal6 结果:" + decimal6.toPlainString());
输出结果如下
9.数值比较方法:compareTo、min、max
1) compareTo() : 比较结果以int类型返回
①返回结果 == 1,代表当前对象大于比较对象
②返回结果 == -1,代表当前对象小于比较对象
③返回结果 == 0,代表当前对象等于比较对象
2) min() : 取两个值中的最小值
3) max() : 取两个值中的最大值
int compareResult1 = BigDecimal.ONE.compareTo(BigDecimal.ONE.negate()); // 1 > -1, compareResult1结果为 1
int compareResult2 = BigDecimal.ZERO.compareTo(BigDecimal.TEN); // 0 < 10, compareResult2结果为 -1
int compareResult3 = BigDecimal.ONE.compareTo(new BigDecimal("1")); // 1 == 1, compareResult3结果为 0
System.out.println("输出结果compareResult1:" + compareResult1);
System.out.println("输出结果compareResult2:" + compareResult2);
System.out.println("输出结果compareResult3:" + compareResult3);
BigDecimal minVal1 = BigDecimal.ONE.min(BigDecimal.ZERO);
// 如果当前对象小于等于比较的对象。则取当前对象的值
BigDecimal minVal2 = BigDecimal.ONE.min(BigDecimal.ONE);
BigDecimal maxVal1 = BigDecimal.ONE.max(BigDecimal.TEN);
// 如果当前对象大于等于比较的对象。则取当前对象的值
BigDecimal maxVal2 = BigDecimal.TEN.max(BigDecimal.TEN);
System.out.println("输出结果 minVal1:" + minVal1);
System.out.println("输出结果 minVal2:" + minVal2);
System.out.println("输出结果 maxVal1:" + maxVal1);
System.out.println("输出结果 maxVal2:" + maxVal2);
输出结果如下