Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。
1.首先是基本的+、 -、 *、 / 方法;对于基本的运算方法BigDecimal提供了对应的方法进行对应的运算。
加法:public BigDecimal add(BigDecimal value)
减法:public BigDecimal subtract(BigDecimal value)
乘法:public BigDecimal multiply(BigDecimal value)
除法:public BigDecimal divide(BigDecimal value)
下面可以对这些方法进行一些简单的使用
/**
* 基本方法,+、-、*、/
*/
BigDecimal num1 = new BigDecimal(10);
BigDecimal num2 = new BigDecimal(5);
System.out.println("num1 + num2 = "+num1.add(num2)); //两数相加 结果为15
System.out.println("num1 - num2 = "+num1.subtract(num2)); //两数相减 结果为5
System.out.println("num1 * num2 = "+num1.multiply(num2)); //两数相乘 结果为50
System.out.println("num1 / num2 = "+num1.divide(num2)); //两数相除 结果为2
对应运行的结果如图:
2.看完了基本的方法后,BigDecimal还提供了精确度的方法(俗称舍入方法):就是给定一个BigDecimal类型的数,需要对其保留多少位小数时候进行运算的方法。方法有许多个,在这里只列举了常用的4个。
/**
* 舍入方法
*/
BigDecimal num3 = new BigDecimal("2.225");
System.out.println(num3.setScale(2, RoundingMode.UP)); //只入不舍 结果为2.23
System.out.println(num3.setScale(2, RoundingMode.DOWN)); //只舍不入 结果为2.22
System.out.println(num3.setScale(2, RoundingMode.HALF_UP)); //四舍五入 >=0.5入 结果为2.23
System.out.println(num3.setScale(2, RoundingMode.HALF_DOWN)); //四舍五入 <=0.5舍 结果为2.22
对应的运行结果如图:
3.接下来便要说一下下一个基本的方法便是取绝对值得方法,有时候我们要获取绝对值并对其进行操作,BigDecimal为我们提供了一个方法获取其绝对值,方便我们使用。
/**
* 取绝对值方法
*/
BigDecimal num4 = new BigDecimal("-2.225");
System.out.println(num4.abs()); //取其绝对值 结果为2.225
对应运行的结果如图:
4.最后一个便是BigDecimal中的比较问题,BigDecimal类中的数值比较不像一般的比较可以用>、<、=;但是BigDecimal类也为我们提供了对应的方法compareTo()来比较两个数值的大小,运算后返回的结果只有3个,两数相等返回0;数1>数2返回1;数1<数2返回-1。
/**
* 比较方法
*/
BigDecimal num5 = new BigDecimal("6");
BigDecimal num6 = new BigDecimal("6");
BigDecimal num7 = new BigDecimal("7");
System.out.println(num5.compareTo(num6)); //相等结果为0
System.out.println(num5.compareTo(num7)); //num5<num7 结果为-1
System.out.println(num7.compareTo(num6)); //num7>num5 结果为1
对应运行的结果如图:
完整的测试代码如下:
package com.it.ds.Test;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Test14 {
public static void main(String[] args) {
/**
* 基本方法,+、-、*、/
*/
BigDecimal num1 = new BigDecimal(10);
BigDecimal num2 = new BigDecimal(5);
System.out.println("num1 + num2 = "+num1.add(num2)); //两数相加 结果为15
System.out.println("num1 - num2 = "+num1.subtract(num2)); //两数相减 结果为5
System.out.println("num1 * num2 = "+num1.multiply(num2)); //两数相乘 结果为50
System.out.println("num1 / num2 = "+num1.divide(num2)); //两数相除 结果为2
System.out.println("-----------------------------------------");
/**
* 舍入方法
*/
BigDecimal num3 = new BigDecimal("2.225");
System.out.println(num3.setScale(2, RoundingMode.UP)); //只入不舍 结果为2.23
System.out.println(num3.setScale(2, RoundingMode.DOWN)); //只舍不入 结果为2.22
System.out.println(num3.setScale(2, RoundingMode.HALF_UP)); //四舍五入 >=0.5入 结果为2.23
System.out.println(num3.setScale(2, RoundingMode.HALF_DOWN)); //四舍五入 <=0.5舍 结果为2.22
System.out.println("-----------------------------------------");
/**
* 取绝对值方法
*/
BigDecimal num4 = new BigDecimal("-2.225");
System.out.println(num4.abs()); //取其绝对值 结果为2.225
System.out.println("-----------------------------------------");
/**
* 比较方法
*/
BigDecimal num5 = new BigDecimal("6");
BigDecimal num6 = new BigDecimal("6");
BigDecimal num7 = new BigDecimal("7");
System.out.println(num5.compareTo(num6)); //相等结果为0
System.out.println(num5.compareTo(num7)); //num5<num7 结果为-1
System.out.println(num7.compareTo(num6)); //num7>num5 结果为1
}
}
运行结果如下:
BigDecimal类的基本使用也就说到这里了,希望对大家有帮助。