BigInteger四则运算
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
BigInteger num1, num2;
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
num1 = in.nextBigInteger();
num2 = in.nextBigInteger();
System.out.println("和:" + num1.add(num2));
System.out.println("差:" + num1.subtract(num2));
System.out.println("积:" + num1.multiply(num2));
BigInteger res[] = num1.divideAndRemainder(num2);
System.out.println("商:" + res[0]);
System.out.println("余数:" + res[1]);
}
in.close();
}
}
BigDecimal常用四则运算
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
final boolean db = true;
BigDecimal num1, num2;
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
num1 = in.nextBigDecimal();
num2 = in.nextBigDecimal();
//注意add,subtract,multiply,divide返回的是一个做完运算的对象的引用,比如
//num1.add(num2)返回的是值为num1 + num2的一个对象的引用,但是
//对num1本身没有做修改,若想做例如num1 += num2的操作需要num1 = num1.add(num2);
System.out.println("和:" + num1.add(num2));
System.out.println("差:" + num1.subtract(num2));
System.out.println("积:" + num1.multiply(num2));
//如果不设置第二个参数scale的话,遇到1 / 3 = 0.333...这种无限循环小数会抛出异常
System.out.println("商:" + num1.divide(num2, 3, BigDecimal.ROUND_HALF_UP));
//使用DecimalFormat格式化输出
DecimalFormat df = new DecimalFormat("#.000");
String ans = df.format(num1);
System.out.println(ans);
//使用setScale格式化输出,但是setScale会去小数位末尾的0
String res = num1.setScale(2, BigDecimal.ROUND_HALF_UP).toString();
System.out.println(res);
System.out.println("以下为测试:");
BigDecimal b0=new BigDecimal("1.00000000");
System.out.println(b0.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue());
if (db) {
//感觉还是format比较靠谱,便于最终的输出格式的控制
ans = df.format(b0);
System.out.println("使用format:" + ans);
}
BigDecimal b1=new BigDecimal("1.00000010");
System.out.println(b1.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue());
BigDecimal b2=new BigDecimal("1.00000020");
System.out.println(b2.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue());
BigDecimal b3=new BigDecimal("1.00000030");
System.out.println(b3.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue());
BigDecimal b4=new BigDecimal("1.00000040");
System.out.println(b4.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue());
BigDecimal b5=new BigDecimal("1.00000050");
System.out.println(b5.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue());
BigDecimal b6=new BigDecimal("1.00000060");
System.out.println(b6.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue());
BigDecimal b7=new BigDecimal("1.00000070");
System.out.println(b7.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue());
BigDecimal b8=new BigDecimal("1.00000080");
System.out.println(b8.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue());
BigDecimal b9=new BigDecimal("1.00000090");
System.out.println(b9.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue());
// 以下为测试:
// 1.0
// 1.0
// 1.0
// 1.0
// 1.0
// 1.000001
// 1.000001
// 1.000001
// 1.000001
// 1.000001
}
in.close();
}
}
做除法运算的时候一定要说明scale,不然可能会由于无限循环小数而抛出异常,最后的格式化输出还是交给format来做比较好