BigInteger
BigInteger常见构造方法
构造方法 | 说明 |
---|---|
BigInteger(int num,Random rnd) | 获取随机最大整数,范围[0 , 2的num次方 - 1] |
BigInteger(String val) (字符串val必须是整数) | 获取指定的大整数 |
BigInteger(String val , int radix) | 获取指定进制的大整数 |
静态方法:public static BigInteger valueOf(long) | 静态方法获取BigInteger的对象,内部有优化 |
BigInteger构造方法小结
- 如果BigInteger表示的数字没有超出long的范围,可以用静态方法获取。
- 如果BigInteger表示的超出long的范围,可以用构造方法获取。
- 对象一旦创建,BigInteger内部记录的值不能发生改变。
- 只要进行计算都会产生一个新的BigInteger对象
Demo:
public class BigIntergerDemo1 {
public static void main(String[] args) {
//获取一个随机的大整数,范围[0 , 2的4次方-1] => [0, 15]
BigInteger bi = new BigInteger(4,new Random());
System.out.println(bi);
//获取一个指定的大整数
BigInteger bi2 = new BigInteger("100000000000000000000");
System.out.println(bi2);
//获取指定进制的大整数
BigInteger bi3 = new BigInteger("100",10); // 十进制的100
System.out.println(bi3);
BigInteger bi4 = new BigInteger("100",2);
System.out.println(bi4);//将2进制的100转换成10进制的4并打印出来
}
}
BigInteger常见成员方法
方法名 | 说明 |
---|---|
add(BigInteger val) | 加法 |
subtract(BigInteger val) | 减法 |
multiply(BigInteger val) | 乘法 |
divide(BigInteger val) | 除法,获取商 |
divideAndRemainder(BigInteger val) | 除法,获取商和余数 |
max/min(BigInteger val) | 返回最大值,最小值 |
intValue(BigInteger val) | 转为int类型整数,超出范围数据有误 |
equals(Object x) | 比较是否相同 |
pow(int exponent) | 次幂 |
Demo:
import java.math.BigInteger;
public class BigIntegerDemo2 {
public static void main(String[] args) {
//创建两个BigInteger对象
BigInteger bi1 = BigInteger.valueOf(10);
BigInteger bi2 = BigInteger.valueOf(5);
//加法
BigInteger bi3 = bi1.add(bi2);
System.out.println(bi3);
//除法,获取商和余数
BigInteger[] arr1 = bi1.divideAndRemainder(bi2);
System.out.println(arr1.length);//2 商和余数
System.out.println(arr1[0]); //2 商
System.out.println(arr1[1]); //0 余数
//equals BigInteger中的equals比较的是值,不是地址值
System.out.println(bi1.equals(bi2)); // false 不相同
bi2 = BigInteger.valueOf(10);
System.out.println(bi1.equals(bi2)); // true 相同
//pow次幂
System.out.println(bi1.pow(2));//100 10的平方
// max/min
System.out.println(bi1.max(bi3));// 15 返回最大值
System.out.println(bi1.min(bi3));// 10 返回最大值
//intValue()转为int类型的整数,超出范围数据有误
int i = bi1.intValue();
System.out.println(i); // 10
BigInteger bi4 = BigInteger.valueOf(9999999999999999L);
int i1 = bi4.intValue();
System.out.println(i1); // 1874919423 超出int类型范围,数据有误
//longValue()转为long类型的整数
long l = bi4.longValue();
System.out.println(l);// 9999999999999999
//doubleValue()转为double类型的小数
double v = bi1.doubleValue();
System.out.println(v); // 10.0
}
}
BigDecimal
- 用于小数的精确计算
- 用来表示很长的小数
BigDecimal的作用是什么?
- 表示较长的小数和解决小数运算精度失真问题。
BigDecimal对象获取方法
构造方法 | 说明 |
---|---|
BigDecimal(double val) | 通过传递double类型的小数来创建对象(有可能不准确) |
BigDecimal(String val) | 通过传递字符串类型的小数来创建对象 |
静态方法 | 说明 |
public static BigDecimal valueOf(double val) | 通过静态方法获取对象 |
Demo:
import java.math.BigDecimal;
public class BigDecimalDemo1 {
public static void main(String[] args) {
//通过传递double类型的小数来创建对象
BigDecimal bd1 = new BigDecimal(8.08);//8.0800000000000000710542735760100185871124267578125
BigDecimal bd2 = new BigDecimal(8.01);//8.0099999999999997868371792719699442386627197265625
System.out.println(bd1);
System.out.println(bd2);
//通过传递字符串类型的小数来创建对象
BigDecimal bd3 = new BigDecimal("8.01");
BigDecimal bd4 = new BigDecimal("8.09");
BigDecimal bd5 = bd3.add(bd4);
System.out.println(bd3);//8.01
System.out.println(bd4);//8.09
System.out.println(bd5);//16.10
//通过静态方法获取对象
BigDecimal bd6 = BigDecimal.valueOf(10);
System.out.println(bd6);
/*
如果要表示的数字不大,建议用静态方法
如果要表示的数字比较大,建议用构造方法
.如果我们传递的是0~10之间的整数,包含0,包含10,那么方法会返回已经创建好的对象,不会重新new
*/
}
}
BigDecimal常见成员方法
方法名 | 说明 |
---|---|
public static BigDecimal valueOf(double val) | 获取对象 |
add(BigDecimal val) | 加法 |
subtract(BigDecimal val) | 减法 |
multiply(BigDecimal val) | 乘法 |
divide(BigDecimal val) | 除法 (如果除不尽,程序报错) |
divide(BigDecimal val, 精确几位, 舍入模式) | 除法 |
Demo:
import java.math.BigDecimal;
import java.math.RoundingMode;
public class BigDecimalDemo3 {
public static void main(String[] args) {
//加法
BigDecimal bd1 = BigDecimal.valueOf(10.0);
BigDecimal bd2 = BigDecimal.valueOf(2.0);
BigDecimal bd3 = bd1.add(bd2);
System.out.println(bd3); // 12.0
//减法
BigDecimal bd4 = bd1.subtract(bd2);
System.out.println(bd4);//8.0
//乘法
BigDecimal bd5 = bd1.multiply(bd2);
System.out.println(bd5); // 20.00
//除法
BigDecimal bd6 = bd1.divide(bd2);
System.out.println(bd6);//5
//有舍入模式的除法
BigDecimal bd7 = BigDecimal.valueOf(3.0);
// bd1.divide(bd7); //除不尽,程序报错
BigDecimal bd8 = bd1.divide(bd7, 2, RoundingMode.HALF_UP);//RoundingMode.HALF_UP四舍五入
System.out.println(bd8);//3.33
}
}
最后:欢迎大家关注我的公众号