#处理Java中的高精度问题
BigInteger
不可变的任意精度的整数。所有操作中,都以二进制补码形式表示 BigInteger(如 Java 的基本整数类型)。BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。另外,BigInteger 还提供以下运算:模算术、GCD 计算、质数测试、素数生成、位操作以及一些其他操作。
基本运算
//加
BigInteger add(long var1);
//减
BigInteger subtract(BigInteger var1);
//乘
BigInteger multiply(BigInteger var1);
//除
BigInteger divide(BigInteger var1);
//取余(结果需要大于0,否则会抛出异常)
BigInteger mod(BigInteger var1);
//求余
BigInteger remainder(BigInteger var1);
//平方
BigInteger pow(int var1);
//取绝对值
BigInteger abs();
//取相反数
BigInteger negate();
//转成var1进制的字符
String toString(int var1);
//转换成基本数据类型
int intValue();
long longValue();
floatValue();
doubleValue();
二进制运算
//与 &
BigInteger and(BigInteger var1);
//或 |
BigInteger or(BigInteger var1);
//异或 ^
BigInteger xor(BigInteger var1);
//取反
BigInteger not();
//左移n位
BigInteger shiftLeft(BigInteger var1);
BigDecimal
不可变的、任意精度的有符号十进制数。BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负 scale 次幂。因此,BigDecimal 表示的数值是 (unscaledValue × 10-scale)。
BigDecimal 类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。toString() 方法提供 BigDecimal 的规范表示形式。
基本运算
//加
BigDecimal add(BigDecimal value);
//减
BigDecimal subtract(BigDecimal value);
//乘
BigDecimal multiply(BigDecimal value);
//除 第一个参数是除数,第二个是保留小数点,第三个是小数处理方式
BigDecimal divide(BigDecimal var1, int var2, int var3);
//求余
BigDecimal remainder(BigDecimal divisor);
//最大值
BigDecimal max(BigDecimal value);
//最小值
BigDecimal min(BigDecimal value);
//绝对值
BigDecimal abs();
//相反数
BigDecimal negate();
区别
在 Java 中提供了用于大数字运算的类,即 java.math.BigInteger 类和 java.math.BigDecimal 类。这两个类用于高精度计算,其中 BigInteger 类是针对整型大数字的处理类,而 BigDecimal 类是针对大小数的处理类。