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));
}
结果: 使用这种方法,如果结果是无限小数,会抛出异常
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 五舍六入