0 什么是大数
如果基本的整数和浮点数精度不能够满足需求,那么可以使用 javamath 包中两个很有用的类:BigInteger和 BiDecimal。
这两个类可以处理包含任意长度数字序列的数值。
BigInteger类实现任意精度的整数运算,BigDecimal实现任意精度的浮点数运算。
1 大数有什么用
在特定的时候必须用大数,不然会发生错误;
例如:
for (int i = 1; i < 11 ; i++) {
System.out.println(i*0.1);
}
正常来说会输出0.1~1
但是结果为:
所以说,这时候就需要用大数来处理了。
假设用大数:
BigDecimal bigDecimal = BigDecimal.valueOf(0.1);
for (int i = 1; i < 11 ; i++) {
System.out.println(bigDecimal.multiply(BigDecimal.valueOf(i)));
}
结果就正常了。
2 使用大数
构造大数:
使用静态的 valueof 方法可以将普通的数值转换为大数:BigInteger a= BigInteger.value0f(100);
大数计算:
不能使用算术运算符(如:+和*)处理大数,而需要使用大数类中的add和multiply方法。
还有一些常量:
大数的所有方法
BigInteger
Modifier and Type | Method and Description | |
---|---|---|
BigInteger |
abs() 返回的值BigInteger是BigInteger的绝对值。 |
|
BigInteger |
add(BigInteger val) 返回的值是 (this + val) BigInteger。 |
|
BigInteger |
and(BigInteger val) 返回的值是 (this & val) BigInteger。 |
|
BigInteger |
andNot(BigInteger val) 返回的值是 (this & ~val) BigInteger。 |
|
int |
bitCount() 返回在补码表示这个BigInteger不同于其符号位的比特数。 |
|
int |
bitLength() 返回最小的二进制补码表示这个BigInteger的比特数,不包括符号位。 |
|
byte |
byteValueExact() 将这一 byte BigInteger ,检查丢失的信息。 |
|
BigInteger |
clearBit(int n) 返回一个BigInteger其值等效于这个BigInteger与指定点清除。 |
|
int |
compareTo(BigInteger val) 这个BigInteger与指定BigInteger比较。 |
|
BigInteger |
divide(BigInteger val) 返回的值是 (this / val) BigInteger。 |
|
BigInteger[] |
divideAndRemainder(BigInteger val) 返回两个关于大整数包含 (this / val) 随后 (this % val) 数组。 |
|
double |
doubleValue() 将这一 double BigInteger。 |
|
boolean |
equals(Object x) 这与平等BigInteger指定对象比较。 |
|
BigInteger |
flipBit(int n) 返回一个BigInteger其值等效于这个BigInteger与指定的位翻转。 |
|
float |
floatValue() 将这一 float BigInteger。 |
|
BigInteger |
gcd(BigInteger val) 返回的值是 abs(this) BigInteger和 abs(val) 最大公约数。 |
|
int |
getLowestSetBit() 返回最右边的指数(低级)在BigInteger这一点(在最右边的一位右零比特数)。 |
|
int |
hashCode() 返回此BigInteger的哈希代码。 |
|
int |
intValue() BigInteger将这一 int 。 |
|
int |
intValueExact() 将这一 int BigInteger ,检查丢失的信息。 |
|
boolean |
isProbablePrime(int certainty) 返回 true 如果这很可能就是BigInteger总理, false 如果它肯定复合。 |
|
long |
longValue() 将这一 long BigInteger。 |
|
long |
longValueExact() 将这一 long BigInteger ,检查丢失的信息。 |
|
BigInteger |
max(BigInteger val) 返回此BigInteger和 val 最大。 |
|
BigInteger |
min(BigInteger val) 返回此BigInteger和 val 最小。 |
|
BigInteger |
mod(BigInteger m) 返回一个BigInteger的价值 (this mod m )。 |
|
BigInteger |
modInverse(BigInteger m) 返回的值是 (this - 1 mod m) BigInteger。 |
|
BigInteger |
modPow(BigInteger exponent, BigInteger m) 返回的值是 (thisexponent mod m) BigInteger。 |
|
BigInteger |
multiply(BigInteger val) 返回的值是 (this * val) BigInteger。 |
|
BigInteger |
negate() 返回的值是 (-this) BigInteger。 |
|
BigInteger |
nextProbablePrime() 返回第一个整数大于这个 BigInteger 可能是素数。 |
|
BigInteger |
not() 返回的值是 (~this) BigInteger。 |
|
BigInteger |
or(BigInteger val) 返回的值是 `(this |
val)` BigInteger。 |
BigInteger |
pow(int exponent) 返回的值是 (thisexponent) BigInteger。 |
|
static BigInteger |
probablePrime(int bitLength, Random rnd) 返回一个正的BigInteger可能是素数,用指定的个位长度。 |
|
BigInteger |
remainder(BigInteger val) 返回的值是 (this % val) BigInteger。 |
|
BigInteger |
setBit(int n) 返回一个BigInteger其值等效于这个BigInteger与指定的点集。 |
|
BigInteger |
shiftLeft(int n) 返回的值是 (this << n) BigInteger。 |
|
BigInteger |
shiftRight(int n) 返回的值是 (this >> n) BigInteger。 |
|
short |
shortValueExact() 将这一 short BigInteger ,检查丢失的信息。 |
|
int |
signum() 返回此BigInteger的符号函数。 |
|
BigInteger |
subtract(BigInteger val) 返回的值是 (this - val) BigInteger。 |
|
boolean |
testBit(int n) 返回 true 当且仅当指定的位设置。 |
|
byte[] |
toByteArray() 返回一个包含此BigInteger的二进制补码表示的字节数组。 |
|
String |
toString() 返回此BigInteger十进制字符串表示形式。 |
|
String |
toString(int radix) 返回在给定的基本BigInteger的字符串表示形式。 |
|
static BigInteger |
valueOf(long val) 返回一个BigInteger其值等于指定的 long 。 |
|
BigInteger |
xor(BigInteger val) 返回的值是 (this ^ val) BigInteger。 |
BigDecimal
Modifier and Type | Method and Description |
---|---|
BigDecimal |
abs() 返回一个 BigDecimal 其价值是本 BigDecimal 的绝对值,其规模 this.scale() 。 |
BigDecimal |
abs(MathContext mc) 返回一个 BigDecimal 其价值是本 BigDecimal 绝对值舍入根据语境设置。 |
BigDecimal |
add(BigDecimal augend) 返回的值是 BigDecimal (this + augend) ,其规模 max(this.scale(), augend.scale()) 。 |
BigDecimal |
add(BigDecimal augend, MathContext mc) 返回的值是 BigDecimal (this + augend) ,舍入根据语境的设置。 |
byte |
byteValueExact() 将这一 byte BigDecimal ,检查丢失的信息。 |
int |
compareTo(BigDecimal val) 这 BigDecimal 与指定的 BigDecimal 比较。 |
BigDecimal |
divide(BigDecimal divisor) 返回的值是 BigDecimal (this / divisor) ,和其首选的规模 (this.scale() - divisor.scale()) ;如果准确的商不能代表(因为它有一个十进制小数点扩展)的 ArithmeticException 抛出。 |
BigDecimal |
divide(BigDecimal divisor, int roundingMode) 返回的值是 BigDecimal (this / divisor) ,其规模 this.scale() 。 |
BigDecimal |
divide(BigDecimal divisor, int scale, int roundingMode) 返回的值是 BigDecimal (this / divisor) ,其规模为指定的。 |
BigDecimal |
divide(BigDecimal divisor, int scale, RoundingMode roundingMode) 返回的值是 BigDecimal (this / divisor) ,其规模为指定的。 |
BigDecimal |
divide(BigDecimal divisor, MathContext mc) 返回的值是 BigDecimal (this / divisor) ,舍入根据语境的设置。 |
BigDecimal |
divide(BigDecimal divisor, RoundingMode roundingMode) 返回的值是 BigDecimal (this / divisor) ,其规模 this.scale() 。 |
BigDecimal[] |
divideAndRemainder(BigDecimal divisor) 返回一二元 BigDecimal 数组包含的结果 divideToIntegralValue 随后的结果 remainder 在两个操作数。 |
BigDecimal[] |
divideAndRemainder(BigDecimal divisor, MathContext mc) 返回一二元 BigDecimal 数组包含的结果 divideToIntegralValue 随后对两个操作数舍入根据上下文设置 remainder 计算结果。 |
BigDecimal |
divideToIntegralValue(BigDecimal divisor) 返回的值是 BigDecimal 商 (this / divisor) 整数部分向下舍入。 |
BigDecimal |
divideToIntegralValue(BigDecimal divisor, MathContext mc) 返回的值是 BigDecimal (this / divisor) 整数部分。 |
double |
doubleValue() 将这一 double BigDecimal 。 |
boolean |
equals(Object x) 这 BigDecimal 与平等的规定 Object 比较。 |
float |
floatValue() 将这一 float BigDecimal 。 |
int |
hashCode() 返回此 BigDecimal 哈希代码。 |
int |
intValue() 将这一 int BigDecimal 。 |
int |
intValueExact() 将这一 int BigDecimal ,检查丢失的信息。 |
long |
longValue() 将这一 long BigDecimal 。 |
long |
longValueExact() 将这一 long BigDecimal ,检查丢失的信息。 |
BigDecimal |
max(BigDecimal val) 返回该 BigDecimal 和 val 最大。 |
BigDecimal |
min(BigDecimal val) 返回该 BigDecimal 和 val 最小。 |
BigDecimal |
movePointLeft(int n) 返回一个 BigDecimal 相当于一个与小数点移动 n 地方留下。 |
BigDecimal |
movePointRight(int n) 返回一个 BigDecimal 相当于这一 n 小数点移动到正确的地方。 |
BigDecimal |
multiply(BigDecimal multiplicand) 返回的值是 BigDecimal (this × multiplicand) ,其规模 (this.scale() + multiplicand.scale()) 。 |
BigDecimal |
multiply(BigDecimal multiplicand, MathContext mc) 返回的值是 BigDecimal (this × multiplicand) ,舍入根据语境的设置。 |
BigDecimal |
negate() 返回的值是 BigDecimal (-this) ,其规模 this.scale() 。 |
BigDecimal |
negate(MathContext mc) 返回的值是 BigDecimal (-this) ,舍入根据语境的设置。 |
BigDecimal |
plus() 返回的值是 BigDecimal (+this) ,其规模 this.scale() 。 |
BigDecimal |
plus(MathContext mc) 返回的值是 BigDecimal (+this) ,舍入根据语境的设置。 |
BigDecimal |
pow(int n) 返回的值是 BigDecimal (thisn) ,权力是精确计算,无限精度。 |
BigDecimal |
pow(int n, MathContext mc) 返回的值是 (thisn) BigDecimal 。 |
int |
precision() 返回该 BigDecimal 的精度。 |
BigDecimal |
remainder(BigDecimal divisor) 返回的值是 (this % divisor) BigDecimal 。 |
BigDecimal |
remainder(BigDecimal divisor, MathContext mc) 返回的值是 BigDecimal (this % divisor) ,舍入根据语境的设置。 |
BigDecimal |
round(MathContext mc) 返回一个 BigDecimal 圆形根据 MathContext 设置。 |
int |
scale() 返回该 BigDecimal 的规模。 |
BigDecimal |
scaleByPowerOfTen(int n) 返回来的值等于( this ×10 n)。 |
BigDecimal |
setScale(int newScale) 返回一个 BigDecimal 其规模是指定的值,其值是数值等于该 BigDecimal 的。 |
BigDecimal |
setScale(int newScale, int roundingMode) 返回一个 BigDecimal 其规模是规定值,且不成比例的价值乘以或除以 BigDecimal 的缩放值十的合适的电源来维持其整体价值的确定。 |
BigDecimal |
setScale(int newScale, RoundingMode roundingMode) 返回一个 BigDecimal 其规模是规定值,且不成比例的价值乘以或除以 BigDecimal 的缩放值十的合适的电源来维持其整体价值的确定。 |
short |
shortValueExact() 将这一 short BigDecimal ,检查丢失的信息。 |
int |
signum() 返回该 BigDecimal signum函数。 |
BigDecimal |
stripTrailingZeros() 返回一个 BigDecimal ,数值上等于这一但任何尾随零从表示删除。 |
BigDecimal |
subtract(BigDecimal subtrahend) 返回的值是 BigDecimal (this - subtrahend) ,其规模 max(this.scale(), subtrahend.scale()) 。 |
BigDecimal |
subtract(BigDecimal subtrahend, MathContext mc) 返回的值是 BigDecimal (this - subtrahend) ,舍入根据语境的设置。 |
BigInteger |
toBigInteger() 将这一 BigInteger BigDecimal 。 |
BigInteger |
toBigIntegerExact() 将这一 BigInteger BigDecimal ,检查丢失的信息。 |
String |
toEngineeringString() 这 BigDecimal 返回字符串表示,如果指数是需要使用工程符号。 |
String |
toPlainString() 返回一个没有指数域这 BigDecimal 字符串表示形式。 |
String |
toString() 返回该 BigDecimal 字符串表示,如果指数是需要使用科学记数法。 |
BigDecimal |
ulp() 返回一个小的尺寸,最后一个单元,这 BigDecimal 。 |
BigInteger |
unscaledValue() 返回一个 BigInteger 其价值是本 BigDecimal 的不成比例的价值。 |
static BigDecimal |
valueOf(double val) 翻译 double 成 BigDecimal ,使用 double 正则字符串表示的 Double.toString(double) 方法提供。 |
static BigDecimal |
valueOf(long val) 翻译 long 值变成零规模 BigDecimal 。 |
static BigDecimal |
valueOf(long unscaledVal, int scale) 翻译 long 不成比例的价值和 int 规模为 BigDecimal 。 |