您的位置:首页 > 编程语言 > Java开发

JAVA大数类 BigInteger和BigDecimal用法

2016-04-03 21:47 369 查看
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来做比较好
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: