BigDecimal
:不可变的、任意精度的有符号十进制数
:由任意精度的整数非标度值和32位的整数标度组成
:使用原因:提供准确精度,适用于商业计算,浮点型float / double计算有失精度
对象创建
BigDecimal big1 = new BigDecimal("3.1415926");
BigDecimal big2 = BigDecimal.valueOf(3.1415924);
字段
BigDecimal pi = new BigDecimal("3.1415926");
BigDecimal ZERO = BigDecimal.ZERO; // 0
BigDecimal ONE = BigDecimal.ONE; // 1
BigDecimal TEN = BigDecimal.TEN; // 10
pi.setScale(3, BigDecimal.ROUND_UP); // 3.142 向上舍入
pi.setScale(3, BigDecimal.ROUND_DOWN); // 3.141 向下舍入
pi.setScale(3, BigDecimal.ROUND_CEILING); // 3.142 向正无穷大舍入
pi.setScale(3, BigDecimal.ROUND_FLOOR); // 3.141 向负无穷大舍入
pi.setScale(3, BigDecimal.ROUND_HALF_UP); // 3.142 四舍五入,0.5入
pi.setScale(3, BigDecimal.ROUND_HALF_DOWN); // 3.142 同上
pi.setScale(3, BigDecimal.ROUND_HALF_EVEN); // 3.142 四舍五入,0.5向偶数舍入
方法
BigDecimal piBig = BigDecimal.valueOf(3.1415926); //将值转换为 BigDecimal
/* + - * / */
pi = pi.add(piBig);
pi = pi.subtract(piBig);
pi = pi.multiply(piBig);
pi = pi.divide(piBig);
/* 商 / 余 */
BigDecimal[] dr = new BigDecimal[2];
pi = pi.divideToIntegralValue(piBig); // 商
pi = pi.remainder(piBig); // 余
dr = pi.divideAndRemainder(piBig); // [商,余]
pi = pi.pow(2); // 求幂
pi = pi.abs(); // 绝对值
pi = pi.negate(); // -this 反数
pi = pi.plus(); // +this
int signum = pi.signum(); // 1 返回 正:1 / 零:0 / 负:-1
int scale = pi.scale(); // 7 返回标度,零或正数为小数点后位数,负数返回非标度值*10的负 scale 次幂
int precision = pi.precision(); // 8 返回精度
BigInteger unscaledValue = pi.unscaledValue(); // 31415926 返回非标度值
/* 移位 */
pi = pi.movePointLeft(2); // 0.031415926 小数点左移
pi = pi.movePointRight(2); // 314.15926 小数点右移
/* 移位 */
pi = pi.movePointLeft(2); // 0.031415926 小数点左移
pi = pi.movePointRight(2); // 314.15926 小数点右移
int compareTo = pi.compareTo(piBig); // 比较,大于1 / 等于0 / 小于-1
boolean equals = pi.equals(piBig); // 比较,2.0 != 2.00
pi = pi.min(piBig); // 返回较小值
pi = pi.max(piBig); // 返回较大值