BigDecimal 是 Java 编程语言中的一个类,位于 java.math 包中。这个类用于表示不可变的、任意精度的十进制数。BigDecimal 由两个独立的部分组成:一个任意精度的整数(不可变的大整数)和一个比例,后者用于确定数值的实际位置。

使用场景

  • 金融计算:由于 BigDecimal 提供了高精度的计算能力,因此非常适合用于财务系统中,确保金额计算的准确性。
  • 科学计算:在需要高精度结果的科学计算中,BigDecimal 同样非常有用。
  • 任何需要精确数值的地方:例如,当处理用户输入的数据时,如果这些数据涉及到了小数点后的数字,使用 BigDecimal 可以避免浮点数运算中的精度损失。

一、四则运算

1.加法 (add)

 示例:
        // 创建 BigDecimal 对象
        BigDecimal number1 = new BigDecimal("123.45");
        BigDecimal number2 = new BigDecimal("67.89");

        // 加法
        BigDecimal sum = number1.add(number2);
        System.out.println("Sum: " + sum); // 输出: Sum: 191.34

2.减法 (subtract)

  示例:
        // 创建 BigDecimal 对象
        BigDecimal number1 = new BigDecimal("123.45");
        BigDecimal number2 = new BigDecimal("67.89");


        // 减法
        BigDecimal difference = number1.subtract(number2);
        System.out.println("Difference: " + difference); // 输出: Difference: 55.56

3.乘法(multiply)

  示例:       
        // 创建 BigDecimal 对象
        BigDecimal number1 = new BigDecimal("123.45");
        BigDecimal number2 = new BigDecimal("67.89");


        // 乘法
        BigDecimal product = number1.multiply(number2);
        System.out.println("Product: " + product); // 输出: Product: 8372.8005

        //处理小数
        setScale(1) 表示保留一位小数,默认为四舍五入

4.除法(divide)

 示例:
        // 创建 BigDecimal 对象
        BigDecimal number1 = new BigDecimal("123.45");
        BigDecimal number2 = new BigDecimal("67.89");

        // 除法
        BigDecimal quotient = number1.divide(number2, 2, BigDecimal.ROUND_HALF_UP);
        System.out.println("Quotient: " + quotient); // 输出: Quotient: 1.82

 注:使用BigDecimal时必须要用结果接收,不可以直接写(number1.add(number2)

5.比较大小

compareTo 方法是 BigDecimal 类中的一个重要方法,用于比较两个 BigDecimal 对象的值。该方法返回一个整数,表示两个 BigDecimal 对象之间的相对大小关系。具体来说,compareTo 方法的返回值有以下三种情况:

返回值为负数(< 0):表示调用 compareTo 方法的对象小于传入的参数。
返回值为零(== 0):表示调用 compareTo 方法的对象等于传入的参数。
返回值为正数(> 0):表示调用 compareTo 方法的对象大于传入的参数

int comparison = num1.compareTo(num2);
if (comparison > 0) {
    System.out.println(num1 + " is greater than " + num2);
} else if (comparison < 0) {
    System.out.println(num1 + " is less than " + num2);
} else {
    System.out.println(num1 + " is equal to " + num2);
}

6.转换类型

6.1:intValue 方法是 BigDecimal 类中的一个方法,用于将 BigDecimal 对象转换为 int 类型的值。这个方法会丢弃小数部分,只保留整数部分。如果 BigDecimal 的值超出了 int 类型的范围(即 -2^312^31 - 1),则会抛出 ArithmeticException 异常。

6.2:doubleValue 方法是 BigDecimal 类中的一个方法,用于将 BigDecimal 对象转换为 double 类型的值。这个方法会将 BigDecimal 的值尽可能精确地转换为 double 类型,但需要注意的是,由于 double 类型的精度限制,转换后的值可能会有一定的误差。

//intValue转换类型
int intValue = num1.intValue();
long longValue = num1.longValue();
double doubleValue = num1.doubleValue();

System.out.println("Int value: " + intValue); // 输出: Int value: 123
System.out.println("Long value: " + longValue); // 输出: Long value: 123
System.out.println("Double value: " + doubleValue); // 输出: Double value: 123.45

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐