Skip to content

❤️ BigInteger

BigInteger 内部用一个 int[] 来模拟一个非常大的整数

创建对象

  • BigInteger new BigInteger(字符串)

计算


格式化

❤️ BigDecimal

BigDecimal 可以表示一个任意大小且精度完全准确的浮点数


创建 BigDecimal

  • BigDecimal bd = new BigDecimal(字符串); 字符串 -> BigDecimal
  • BigDecimal valueOf(double/long) 浮点数 -> BigDecimal
  • BigDecimal valueOf(long, 小数位数) 比如 valueOf(234567, 3) 就会转成 BigDecimal 的 234.567
  • 常用数字
    • BigDecimal.ZERO
    • BigDecimal.ONE
    • BigDecimal.TEN

小数位数

  • int scale() 获取到 BigDecimal 的小数位数,如果返回负数,比如 -2 ,表示这个数是个整数,并且末尾有 2 个 0
  • BigDecimal 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 末尾的 0
  • toString() 可以保留末尾的 0
  • doubleValue() 转 double
  • floatValue()
  • longValue()
  • intValue()

https://blog.51cto.com/knifeedge/5136082


比较

  • equals() 不但要求两个 BigDecimal 的值相等,还要求它们的精度相等
  • compareTo() 返回负数,表示小于;返回 0,表示等于;返回正数,表示大于