Java中大数字的操作类:
Int的最大值为2^31-1,如果要处理更大的数,就必须用到BigInteger,BigInteger类中提供了加、减、乘、除、绝对值、相反数、最大公约数、判断是否为质数等方法。
使用BigInteger类,可以实例化一个BigIngeger对象,并自动调用相应的构造函数。BigInteger有很多构造函数,但是最直接的一种方式是参数以字符串的形式代表要处理的数字。
语法:
public BigInteger(String value);
将2转化为BigInteger类型:
BigInteger twoInstance = new BigInteger("2");
| 运算方法 | 功能描述 |
| public BigInteger add(BigInteger val) | 做加法运算 |
| public BigInteger subtract(BigInteger val) | 做减法运算 |
| public BigInteger multiply(BigInteger val) | 做乘法运算 |
| public BigInteger devide(BigInteger val) | 做除法运算 |
| public BigInteger remainder(BigInteger val) | 做取余操作 |
| public BigInteger[] divideAndRemainder(BigInteger val) | 用数组返回商和余数,结果数组中第一个值为商,第二个数为余数 |
| public BigInteger pow(int exponent) | 进行取参数的exponent操作 |
| public BigInteger negate() | 取相反数 |
| public BigInteger shiftLeft(int n) | 将数字左移n位,如果n为负数,做右移操作 |
| public BigInteger shiftRight(int n) | 将数字右移n位,如果n为负数,做左移操作 |
| public BigInteger and(BigInteger val) | 做与操作 |
| public BigInteger or(BigInteger val) | 做或操作 |
| public int compareTo(BigInteger val) | 做数字比较操作 |
| public boolean equals(Object x) | 当x是BigInteger类型的数字且数值相等时,返回true,否则返回false |
| public BigInteger min(BigInteger val) | 返回较小的数值 |
| public BigInteger max(BigInteger val) | 返回较大的数值 |
- package MathInfo;
-
- import java.math.BigInteger;
-
- public class BigIntegerDemo {
- public static void main(String[] args) {
- BigInteger bigInstance = new BigInteger("4");
- //将该数+2操作
- System.out.println("加法操作:" + bigInstance.add(new BigInteger("2"))); //加法操作:6
- //将该数-2操作
- System.out.println("减法操作:" + bigInstance.subtract(new BigInteger("2"))); //减法操作:2
- //将该数*2操作
- System.out.println("乘法操作:" + bigInstance.multiply(new BigInteger("2"))); //乘法操作:8
- //将该数➗2操作
- System.out.println("除法操作:" + bigInstance.divide(new BigInteger("2"))); //除法操作:2
- //该数÷3的商
- System.out.println("取商操作:" + bigInstance.divideAndRemainder(new BigInteger("3"))[0]); //取商操作:1
- //该大数字÷3的余数
- System.out.println("大数字取余操作:" + bigInstance.divideAndRemainder(new BigInteger("3"))[1]); //大数字取余操作:1
- //该大数字的2次方
- System.out.println("该大数字的2次方:" + bigInstance.pow(2)); //该大数字的2次方:16
- //该大数字的相反数
- System.out.println("该大数字的相反数:" + bigInstance.negate()); //该大数字的相反数:-4
- }
-
-
- }
java.math.BigDecimal类支持任何精度的定点数,适用与float和double类型数据来做科学计算、货币计算等。
BigDecimal型的数字可以用来做超大浮点数的运算,包括加、减、乘、除等,在所有运算中,除法是最复杂的,因为在除不尽的情况下,末尾小数点的处理需要被考虑。
实例化时将双精度型转换为BigDecimal类型
实例化时将字符串型转换为BigDecimal类型
| 方法 | 功能说明 |
| public BigDecimal add(BigDecimal augend) | 加法操作 |
| public BigDecimal subtract(BigDecimal subtrahend) | 减法操作 |
| public BigDecimal multiply(BigDecimal multiplicand) | 乘法操作 |
| public BigDecimal devide(BigDecimal divisor, int scale, int roundingMode) | 除法操作,参数分别代表:除数,商的小数点后的位数,近似处理模式 |
BigDecimal类中的divide()方法有多种设置,用于返回商末位小数点的处理,如:
| 模式 | 含义 |
| BigDecimal.ROUND_UP | 商的最后一位若大于0,则向前进位,正负数都如此 |
| BigDecimal.ROUND_DOWN | 商的最后一位无论是什么数字,都省略 |
| BigDecimal.ROUND_CEILING | 商如果是正数,按照ROUND_UP处理,如果是负数,按照ROUND_DOWN处理。这2种模式的处理都会使近似值大于等于实际值 |
| BigDecimal.ROUND_FLOOR | 与ROUND_CEILING相反,商如果是正数,按照ROUND_DOWN处理,如果是负数,按照ROUND_CEILING处理。这2种模式的处理都会使近似值小于等于实际值 |
| BigDecimal.ROUND_HALF_DOWN | 对商进行四舍五入操作,如果商最后一位小于等于5,则做舍弃操作;若最后一位大于5,则做进位操作,如7.5≈7 |
| BigDecimal.ROUND_HALF_UP | 对商进行四舍五入操作,如果商最后一位小于5,则做舍弃操作;若最后一位大于等于5,则做进位操作,如7.5≈8 |
| BigDecimal.ROUND_HALF_EVEN | 如果商的倒数第二位为奇数,则按照ROUND_HALF_UP处理;如果商的倒数第二位为偶数,则按照ROUND_HALF_DOWN处理;如7.5≈8, 8.5≈8 |
- /**
- * 实现加减乘除
- */
- package MathInfo;
-
- import java.math.BigDecimal;
-
- public class BigDecimalDemo {
- static final int location = 10;
-
- //定义加法
- public BigDecimal add(double value1, double value2) {
- // BigDecimal b1 = new BigDecimal(value1); //不能用这种方法,最后相加结果小数位非常多,不精确
- // BigDecimal b2 = new BigDecimal(value2);
- BigDecimal b1 = new BigDecimal(Double.toString(value1));
- BigDecimal b2 = new BigDecimal(Double.toString(value2));
- return b1.add(b2);
- }
-
- //定义减法
- public BigDecimal subTract(double value1, double value2) {
- BigDecimal b1 = new BigDecimal(Double.toString(value1));
- BigDecimal b2 = new BigDecimal(Double.toString(value2));
- return b1.subtract(b2);
- }
-
- //定义乘法
- public BigDecimal multiPly(double value1, double value2) {
- BigDecimal b1 = new BigDecimal(Double.toString(value1));
- BigDecimal b2 = new BigDecimal(Double.toString(value2));
- return b1.multiply(b2);
- }
-
- //定义除法,参数为除数与被除数以及商小数点后位数
- public BigDecimal myDivide(double value1, double value2, int b) {
- if (b < 0) {
- System.out.println("b必须大于等于0!");
- }
- BigDecimal b1 = new BigDecimal(Double.toString(value1));
- BigDecimal b2 = new BigDecimal(Double.toString(value2));
- //调用divide方法,商后保留b位小数,并做四舍五入操作
- return b1.divide(b2, b, BigDecimal.ROUND_HALF_UP);
-
- }
-
- public BigDecimal myDivide(double value1, double value2) {
- return myDivide(value1, value2, location);
- }
-
- public static void main(String[] args) {
- BigDecimalDemo b = new BigDecimalDemo();
- System.out.println("两个数字相加结果:" + b.add(-7.5, 8.9)); //两个数字相加结果:1.4
- System.out.println("两个数字相减结果:" + b.subTract(8, 8.9)); //两个数字相减结果:-0.9
- System.out.println("两个数字相乘结果:" + b.multiPly(8, -2)); //两个数字相乘结果:-16.00
- System.out.println("两个数字相除结果:" + b.myDivide(10, 2)); //两个数字相除结果:5.0000000000
- System.out.println("两个数字相除结果,保留后面5位小数:" + b.myDivide(10, 3, 5)); //两个数字相除结果,保留后面5位小数:3.33333
- }
- }