一、BigInteger
大数操作,long的范围是有限的
如:111111111111111111111111111111111111
long保存不了,只能用大数解决
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int i=0;
//创建方式1,需要输入时
BigInteger b1 = new BigInteger("0");
b1=in.nextBigInteger();
//创建方式2,不需要输入时
BigInteger b2 = new BigInteger("1111111111111111111111111111");
b1.add(b2); //b1+b2 加
b1.subtract(b2); //b1-b2 减
b1.multiply(b2); //b1*b2 乘
b1.divide(b2); //b1/b2 除
b1.max(b2); //取b1和b2中较大的那一个
b1.min(b2); //取b1和b2中较小的那一个
// 除法操作,数组的第一个元素是除法的商,第二个元素是除法的余数
BigInteger[] bArr = b1.divideAndRemainder(b2);
System.out.println("商:" + bArr[0]);
System.out.println("余数:" + bArr[1]);
//将long 或 int型转换为BigInteger型
//因为long和int不能直接和BigInteger进行运算
BigInteger b3 =BigInteger.valueOf(i);
BigInteger gcd = x.gcd(y); //BigInteger自带的求最大公约数的方法
}
}
二、BigDecimal
小数操作,double的范围是有限的
如:0.111111111111111111111111111111111111
double保存不了,只能用小数解决
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
double i=1.32;
//创建方式1,需要输入时
BigDecimal b1 = new BigDecimal("0");
b1=in.nextBigDecimal();
//创建方式2,不需要输入时
BigDecimal b2 = new BigDecimal("0.1111111111111111111111111111");
b1.add(b2); //b1+b2 加
b1.subtract(b2); //b1-b2 减
b1.multiply(b2); //b1*b2 乘
// 除法,开始四舍五入模式,否则可能会报 ArithmeticException
b1.divide(b2, BigDecimal.ROUND_HALF_UP);
b1.max(b2); //取b1和b2中较大的那一个
b1.min(b2); //取b1和b2中较小的那一个
// 除法操作,数组的第一个元素是除法的商,第二个元素是除法的余数
BigDecimal[] bArr = b1.divideAndRemainder(b2);
System.out.println("商:" + bArr[0]);
System.out.println("余数:" + bArr[1]);
//将float 或double型转换为BigDecimal型
//因为float和double不能直接和BigDecimal进行运算
BigDecimal b3 =BigDecimal.valueOf(i);
}
}