❤️ BigInteger
BigInteger 内部用一个 int[] 来模拟一个非常大的整数
创建对象 :
BigInteger new BigInteger(字符串)
计算 :
格式化 :
❤️ BigDecimal
BigDecimal 可以表示一个任意大小且精度完全准确的浮点数
创建 BigDecimal :
BigDecimal bd = new BigDecimal(字符串);字符串 -> BigDecimalBigDecimal valueOf(double/long)浮点数 -> BigDecimalBigDecimal valueOf(long, 小数位数)比如 valueOf(234567, 3) 就会转成 BigDecimal 的 234.567- 常用数字
- BigDecimal.ZERO
- BigDecimal.ONE
- BigDecimal.TEN
小数位数 :
int scale()获取到 BigDecimal 的小数位数,如果返回负数,比如 -2 ,表示这个数是个整数,并且末尾有 2 个 0BigDecimal setScale(小数位数,截断方法)给 BigDecimal 设置小数位数,如果精度比原始值低,那就会调用截断方法- 截断方法
- RoundingMode.UP 绝对值向上取整(2.5 -> 3,-1.6 -> -2)
- RoundingMode.DOWN 绝对值向下取整 (2.5 -> 2)
- CEILING 向上取整 (2.5 -> 3,-1.6 -> -1)
- FLOOR 向下取整
- RoundingMode.HALF_UP 四舍五入
- 截断方法
BigDecimal movePointLeft(int)小数点左移几位
java
BigDecimal d1 = new BigDecimal("123.456789");
BigDecimal d2 = d1.setScale(4, RoundingMode.HALF_UP); // 四舍五入,123.4568
BigDecimal d3 = d1.setScale(4, RoundingMode.DOWN); // 直接截断,123.4567计算 :
- 【加】
add(数值)
- 【减】
subtract(数值)
- 【乘】
multiply(数值)
- 【除】
BigDecimal divide()除不尽会报错BigDecimal divide(数字,精度,截断方法)BigDecimal[] divideAndRemainder()得到商的同时,得到余数,数组的第一个元素是商,第二个元素是余数
BigDecimal negate()返回这个数的相反数BigDecimal abs()返回这个数的绝对值
java
BigDecimal n = new BigDecimal("12.345");
BigDecimal m = new BigDecimal("0.12");
BigDecimal[] dr = n.divideAndRemainder(m);
System.out.println(dr[0]); // 102
System.out.println(dr[1]); // 0.105格式化 :
BigDecimal stripTrailingZeros()去除 BigDecimal 末尾的 0toString()可以保留末尾的 0doubleValue()转 doublefloatValue()longValue()intValue()
https://blog.51cto.com/knifeedge/5136082
比较 :
equals()不但要求两个 BigDecimal 的值相等,还要求它们的精度相等compareTo()返回负数,表示小于;返回 0,表示等于;返回正数,表示大于