1、BigInteger的运算
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// String num1 = "999999999999999999999999999999";
// String num2 = "999999999999999999999999999998";
// BigInteger big1 = new BigInteger(num1);
// BigInteger big2 = new BigInteger(num2);
Scanner sc=new Scanner(System.in);
BigInteger big1=sc.nextBigInteger();
BigInteger big2=sc.nextBigInteger();
System.out.println("加法操作:" + big1.add(big2));
System.out.println("减法操作:" + big1.subtract(big2));
System.out.println("乘法操作:" + big1.multiply(big2));
BigInteger result[] = big1.divideAndRemainder(big2);
System.out.println("相除后的商是:" + result[0]);
System.out.println("相除后的余数是:" + result[1]);
}
}
2、BigDecimal的运算
import java.math.BigDecimal;
public class Main {
/*
* ROUND_HALF_UP: 遇到.5的情况时往上近似,例: 1.5 ->2 ; ROUND_HALF_DOWN:
* 遇到.5的情况时往下近似,例:1.5 ->;1
*/
public static BigDecimal add(String num1, String num2) {// 加法
BigDecimal big1 = new BigDecimal(num1);
BigDecimal big2 = new BigDecimal(num2);
return big1.add(big2);
}
public static BigDecimal sub(String num1, String num2) {// 减法
BigDecimal big1 = new BigDecimal(num1);
BigDecimal big2 = new BigDecimal(num2);
return big1.subtract(big2);
}
public static BigDecimal mul(String num1, String num2) {// 乘法
BigDecimal big1 = new BigDecimal(num1);
BigDecimal big2 = new BigDecimal(num2);
return big1.multiply(big2);
}
public static BigDecimal round(BigDecimal num, int scale) {// 四舍五入,保留scale位小数
return num.setScale(scale, BigDecimal.ROUND_HALF_DOWN);
}
public static BigDecimal div(String num1, String num2, int scale) {// 除法,保留scale位小数
BigDecimal bd1 = new BigDecimal(num1);
BigDecimal bd2 = new BigDecimal(num2);
return bd1.divide(bd2, scale, BigDecimal.ROUND_HALF_UP);
}
public static int compare(String num1, String num2){//-1小于,0等于,1大于
BigDecimal bd1 = new BigDecimal(num1);
BigDecimal bd2 = new BigDecimal(num2);
return bd1.compareTo(bd2);
}
public static BigDecimal sqrt(BigDecimal a) {//开方
BigDecimal l = BigDecimal.ZERO, r = a, mid = a;
BigDecimal two = new BigDecimal("2");
BigDecimal eps = new BigDecimal(1e-120);
while (l.compareTo(r.subtract(eps)) == -1)
{
mid = l.add(r).divide(two);
if (mid.multiply(mid).compareTo(a) == 1)
{
r = mid;
}
else
{
l = mid;
}
}
return mid;
}
public static void main(String[] args) {
String num1 = "12345.6789";
String num2 = "3333.23443";
String num3 = "123456";
BigDecimal a = new BigDecimal(num3);
System.out.println("加法操作:" + round(add(num1, num2), 2));
System.out.println("减法操作:" + round(sub(num1, num2), 2));
System.out.println("乘法操作:" + round(mul(num1, num2), 2));
System.out.println("除法操作:" + div(num1, num2, 2));
System.out.println("开方操作:" + sqrt(a));
System.out.println("比较操作:" + compare(num1, num2));
}
}