目录
由于float类和double类在运算时容易出现误差,于是需要借助BigDecimal类控制精度。
eg:控制台计算0.1+0.2:
System.out.println(0.1+0.2);
结果:存在误差
BigDecimal类计算需要new对象来计算,用两个对象来进行相应的计算。
一、重要常用方法:+、-、×、÷
一、+:add后返回的是一个新对象,而不是改变原对象的值,例如:
BigDecimal b1 = new BigDecimal("0.111111111"); //注:必须带双引号
BigDecimal b2 = new BigDecimal("0.222222222");
BigDecimal b3 = b1.add(b2);
System.out.println(b1);
System.out.println(b2);
System.out.println(b3);
结果:对象b1和b2的值未改变,add后的返回值赋给b3。
如果我们想用int型的运算结果,可以用value方法。
eg:需要int型的
System.out.println(b3.intValue());
结果:
二、-×÷:
BigDecimal b3 = b1.subtract(b2); //减法
BigDecimal b4 = b1.multiply(b2); //乘法
BigDecimal b5 = b1.divide(b2); //除法
二、所有方法
变量和类型 | 方法 | 描述 |
---|---|---|
BigDecimal | abs() | 返回 |
BigDecimal | abs(MathContext mc) | 返回 |
BigDecimal | add(BigDecimal augend) | 返回 |
BigDecimal | add(BigDecimal augend, MathContext mc) | 返回 |
byte | byteValueExact() | 将 |
int | compareTo(BigDecimal val) | 将此 |
BigDecimal | divide(BigDecimal divisor) | 返回 |
BigDecimal | divide(BigDecimal divisor, int roundingMode) | 已过时。 应该优先使用方法 |
BigDecimal | divide(BigDecimal divisor, int scale, int roundingMode) | 已过时。 应该优先使用方法 |
BigDecimal | divide(BigDecimal divisor, int scale, RoundingMode roundingMode) | 返回 |
BigDecimal | divide(BigDecimal divisor, MathContext mc) | 返回 |
BigDecimal | divide(BigDecimal divisor, RoundingMode roundingMode) | 返回 |
BigDecimal[] | divideAndRemainder(BigDecimal divisor) | 返回一个两元件 |
BigDecimal[] | divideAndRemainder(BigDecimal divisor, MathContext mc) | 返回一个两元件 |
BigDecimal | divideToIntegralValue(BigDecimal divisor) | 返回 |
BigDecimal | divideToIntegralValue(BigDecimal divisor, MathContext mc) | 返回 |
double | doubleValue() | 将 |
boolean | equals(Object x) | 将此 |
float | floatValue() | 将 |
int | hashCode() | 返回此 |
int | intValue() | 将 |
int | intValueExact() | 将 |
long | longValue() | 将 |
long | longValueExact() | 将此 |
BigDecimal | max(BigDecimal val) | 返回 |
BigDecimal | min(BigDecimal val) | 返回 |
BigDecimal | movePointLeft(int n) | 返回一个 |
BigDecimal | movePointRight(int n) | 返回一个 |
BigDecimal | multiply(BigDecimal multiplicand) | 返回 |
BigDecimal | multiply(BigDecimal multiplicand, MathContext mc) | 返回 |
BigDecimal | negate() | 返回 |
BigDecimal | negate(MathContext mc) | 返回 |
BigDecimal | plus() | 返回 |
BigDecimal | plus(MathContext mc) | 返回 |
BigDecimal | pow(int n) | 返回 |
BigDecimal | pow(int n, MathContext mc) | 返回 |
int | precision() | 返回此 |
BigDecimal | remainder(BigDecimal divisor) | 返回 |
BigDecimal | remainder(BigDecimal divisor, MathContext mc) | 返回 |
BigDecimal | round(MathContext mc) | 返回 |
int | scale() | 返回 |
BigDecimal | scaleByPowerOfTen(int n) | 返回其数值等于( |
BigDecimal | setScale(int newScale) | 返回 |
BigDecimal | setScale(int newScale, int roundingMode) | 已过时。 应该优先使用方法 |
BigDecimal | setScale(int newScale, RoundingMode roundingMode) | 返回 |
short | shortValueExact() | 将此 |
int | signum() | 返回此 |
BigDecimal | sqrt(MathContext mc) | 返回 |
BigDecimal | stripTrailingZeros() | 返回 |
BigDecimal | subtract(BigDecimal subtrahend) | 返回 |
BigDecimal | subtract(BigDecimal subtrahend, MathContext mc) | 返回 |
BigInteger | toBigInteger() | 将 |
BigInteger | toBigIntegerExact() | 将 |
String | toEngineeringString() | 如果需要指数,则使用工程符号返回此 |
String | toPlainString() | 返回此 |
String | toString() | 如果需要指数,则使用科学计数法返回此 |
BigDecimal | ulp() | 返回此 |
BigInteger | unscaledValue() | 返回 |
static BigDecimal | valueOf(double val) | 转换一个 |
static BigDecimal | valueOf(long val) | 将 |
static BigDecimal | valueOf(long unscaledVal, int scale) | 将 |