导言:
计算机中数字的表示范围是有一定的限制的,像Java中,常用的数据类型,如int、double等数据类型表示的范围都是有限的,当我们要计算的数字,其位数达到成百上千时,这些数据类型无法满足我们的需求,C语言中我们可以使用数组来储存位数,再对两个数组进行相应的运算;Java中为了处理大整数的运算,提供了一种数据类型:BigInteger,BigDecimal,它能存储任意位数的大数,并提供对它们进行操作的方法。
说明:
BigInteger 和 BigDecimal 是位于java.math 包下的两个类,具体摘要如下:
BigDecimal
不可变的、任意精度的有符号十进制数。任意精度小数
BigInteger
不可变的任意精度的整数。任意精度整数
BigInteger基本运算:
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
BigInteger one = scanner.nextBigInteger();
BigInteger two = scanner.nextBigInteger();
System.out.println("大数相加:" + one.add(two));
System.out.println("大数相减:" + one.subtract(two));
System.out.println("大数相乘:" + one.multiply(two));
System.out.println("大数相除:" + one.divide(two));
scanner.close();
}
}
BigInteger的基本操作
方法
类型
描述
public BigInteger add(BigInteger val)
普通
将两个大数相加
public BigInteger subtract(BigInteger val)
普通
将两个大数相减
public BigInteger multiply(BigInteger val)
普通
将两个大数相乘
public BigInteger divide(BigInteger val)
普通
将两个大数相除
public BigInteger max(BigInteger val)
普通
返回两个大数中的最大值
public BigInteger min(BigInteger val)
普通
返回两个大数中的最小值
public BigInteger[] divideAndRemainder(BigInteger val)
普通
除发操作,数组的第一个元素为除法的商,第二个元素为除法的余数
public int compareTo(BigInteger val)
普通
当此 BigInteger 在数值上小于、等于或大于 val 时,返回 -1,0,或 1。
public boolean equals(Object x)
普通
当且仅当指定的 Object 是一个其值在数字上等于此 BigInteger 的 BigInteger 时,返回 true。
更多方法实现请看api文档:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh
BigDecimal基本操作:
BigDecimal 与 BigInteger 基本上操作方法都相同,加减乘除基本相似
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
BigDecimal one = scanner.nextBigDecimal();
BigDecimal two = scanner.nextBigDecimal();
System.out.println(one.compareTo(two));
System.out.println(one.equals(two));
}
scanner.close();
}
}
输入输出数据如下:
000000000000000001 1
0
true
00000000000001.0 1
0
false
1.0 1
0
false
compareTo:值相等但具有不同标度的两个 BigDecimal 对象(如,2.0 和 2.00)被认为是相等的。当此 BigDecimal 在数字上小于、等于或大于 val 时,返回 -1、0 或 1。
equals:仅当两个 BigDecimal 对象的值和标度都相等时,此方法才认为它们相等(因此通过此方法进行比较时,2.0 不等于 2.00)。当且仅当指定的 Object 为 BigDecimal,并且其值和标度都等于此 BigDecimal 的值和标度时,返回 true。
nlk