Java基础-通过BigDecimal进行高精度计算

通过BigDecimal进行高精度计算

BigDecimal

创建方法

可以通过

  • BigDecimal(int val)
  • BigDecimal(double val)
  • BigDecimal(long val)
  • BigDecimal(String val)

进行创建,不过使用double创建可能会得到跟你预想不一样的结果,推荐使用 new BigDecimal(String val)。

加法

add

public static void main(String args[]) {
  Scanner sc = new Scanner(System.in);
  String a = sc.nextLine();
  String b = sc.nextLine();
  BigDecimal v1 = new BigDecimal(a);
  BigDecimal v2 = new BigDecimal(b);
  sc.close();
  System.out.println(v1.add(v2)); 
}

减法

subtract

public static void main(String args[]) {
  Scanner sc = new Scanner(System.in);
  String a = sc.nextLine();
  String b = sc.nextLine();
  BigDecimal v1 = new BigDecimal(a);
  BigDecimal v2 = new BigDecimal(b);
  sc.close();
  System.out.println(v1.subtract(v2)); 
}

乘法

multiply

public static void main(String args[]) {
  Scanner sc = new Scanner(System.in);
  String a = sc.nextLine();
  String b = sc.nextLine();
  BigDecimal v1 = new BigDecimal(a);
  BigDecimal v2 = new BigDecimal(b);
  sc.close();
  System.out.println(v1.multiply(v2)); 
}

除法

  • divide(BigDecimal divisor)
  • divideAndRemainder(BigDecimal divisor)
  • divide(BigDecimal divisor, int scale, RoundingMode roundingMode)

divide(BigDecimal divisor)

public static void main(String[] args) {
    BigDecimal v1 = new BigDecimal("5");
    BigDecimal v2 = new BigDecimal("2");
    System.out.println(v1.divide(v2));
    v1 = new BigDecimal("7");
    v2 = new BigDecimal("2.4");
    System.out.println(v1.divide(v2));
}

结果: alt 使用这种方法,如果结果是无限小数,会抛出异常

divideAndRemainder(BigDecimal divisor)

public static void main(String[] args) {
    BigDecimal v1 = new BigDecimal("5");
    BigDecimal v2 = new BigDecimal("2");
    BigDecimal[] res = v1.divideAndRemainder(v2);
    System.out.println(res[0] + " " + res[1]);
    v1 = new BigDecimal("7");
    v2 = new BigDecimal("2.4");
    res = v1.divideAndRemainder(v2);
    System.out.println(res[0] + " " + res[1]);
}

结果:

2 1

2 2.2

使用这种方***整除被除数,并得到余数,把这两个值包装成一个BigDecimal数组返回。

divide(BigDecimal divisor, int scale, RoundingMode roundingMode)

public static void main(String[] args) {
    BigDecimal v1 = new BigDecimal("7");
    BigDecimal v2 = new BigDecimal("3");
    BigDecimal res = v1.divide(v2, 2, RoundingMode.HALF_UP);
    System.out.println(res);
}

结果: 2.33

参数说明: 第一个值是被除数,第二个是结果保留的位数,三个是舍弃的方式。

常有的舍弃方式:

  • DOWN 直接舍弃
  • UP 如果舍弃位非0,则向上一位进1
  • HALF_UP 四舍五入
  • HALF_DOWN 五舍六入
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务