roundingmode详解

发布时间:2023-05-18

在编程开发中,有些时候需要对数字进行四舍五入、向上取整、向下取整等操作,在Java中提供了RoundingMode用于控制舍入行为。该类定义了一些用于指定数字的舍入模式的常量。在本文中,我们将深入了解RoundingMode常量以及其应用场景。

一、RoundingMode.UP

RoundingMode.UP 是 rounding mode 的一种。它可以用于舍入 BigDecimal 中的数字。舍入后的结果将被得到一个较大的值。下面是一个简单的示例:

import java.math.BigDecimal;
import java.math.RoundingMode;
public class RoundingModeDemo {
    public static void main(String[] args) {
        BigDecimal num = new BigDecimal("3.1415926");
        BigDecimal result = num.setScale(2, RoundingMode.UP);
        System.out.println(result);
    }
}
// 输出结果:3.15

在上述代码中,我们将数字 3.1415926 舍入到小数点后两位,并使用RoundingMode.UP选择舍入方法,结果将是3.15

二、RoundingMode 四舍五入

RoundingMode.HALF_UP 是 rounding mode 的一种。它可以用于舍入 BigDecimal 中的数字。舍入后的结果将四舍五入。下面是一个简单的示例:

import java.math.BigDecimal;
import java.math.RoundingMode;
public class RoundingModeDemo {
    public static void main(String[] args) {
        BigDecimal num = new BigDecimal("3.1415926");
        BigDecimal result = num.setScale(2, RoundingMode.HALF_UP);
        System.out.println(result);
    }
}
// 输出结果:3.14

在上述代码中,我们将数字 3.1415926 舍入到小数点后两位,并使用RoundingMode.HALF_UP选择舍入方法,最终结果将四舍五入为 3.14

三、RoundingMode 向上取整

RoundingMode.CEILING 是 rounding mode 的一种。它可以用于舍入 BigDecimal 中的数字。舍入后得到的结果将被舍入到较大的值。下面是一个简单的示例:

import java.math.BigDecimal;
import java.math.RoundingMode;
public class RoundingModeDemo {
    public static void main(String[] args) {
        BigDecimal num = new BigDecimal("3.1415926");
        BigDecimal result = num.setScale(2, RoundingMode.CEILING);
        System.out.println(result);
    }
}
// 输出结果:3.15

在此代码中,我们将数字 3.1415926 舍入到小数点后两位,并使用了RoundingMode.CEILING选择舍入方法,结果将被舍入到一个较大的值3.15

四、RoundingMode 半向上取舍

RoundingMode.HALF_UP 是 rounding mode 的一种。它可以用于舍入 BigDecimal 中的数字。舍入后的结果将半向上舍入。下面是一个简单的示例:

import java.math.BigDecimal;
import java.math.RoundingMode;
public class RoundingModeDemo {
    public static void main(String[] args) {
        BigDecimal num = new BigDecimal("3.5456");
        BigDecimal result1 = num.setScale(2, RoundingMode.HALF_UP);
        BigDecimal result2 = num.setScale(3, RoundingMode.HALF_UP);
        System.out.println(result1); // 3.55
        System.out.println(result2); // 3.546
    }
}

在此代码中,我们将数字 3.5456 舍入到小数点后两位或小数点后三位,并使用RoundingMode.HALF_UP选择舍入方法,最终结果将被半向上舍入。

五、RoundingMode 向下取整

RoundingMode.DOWN 是 rounding mode 的一种。它可以用于舍入 BigDecimal 中的数字。结果将被舍入到一个较小的值。下面是一个简单的示例:

import java.math.BigDecimal;
import java.math.RoundingMode;
public class RoundingModeDemo {
    public static void main(String[] args) {
        BigDecimal num = new BigDecimal("3.9996");
        BigDecimal result1 = num.setScale(2, RoundingMode.DOWN);
        BigDecimal result2 = num.setScale(3, RoundingMode.DOWN);
        System.out.println(result1); // 3.99
        System.out.println(result2); // 3.999
    }
}

在此代码中,我们将数字 3.9996 舍入到小数点后两位或小数点后三位,并使用了RoundingMode.DOWN选择舍入方法,最终结果将被舍入到较小的值。

六、RoundingMode 半向下取舍

RoundingMode.HALF_DOWN 是 rounding mode 的一种。它可以用于舍入 BigDecimal 中的数字。结果将被半向下舍入。下面是一个简单的示例:

import java.math.BigDecimal;
import java.math.RoundingMode;
public class RoundingModeDemo {
    public static void main(String[] args) {
        BigDecimal num = new BigDecimal("3.5456");
        BigDecimal result1 = num.setScale(2, RoundingMode.HALF_DOWN);
        BigDecimal result2 = num.setScale(3, RoundingMode.HALF_DOWN);
        System.out.println(result1); // 3.54
        System.out.println(result2); // 3.546
    }
}

在此代码中,我们将数字 3.5456 舍入到小数点后两位或者小数点后三位,并使用了 RoundingMode.HALF_DOWN 选择舍入方法,结果将被半向下舍入。

七、RoundingMode 向下取整

RoundingMode.FLOOR 是 rounding mode 的一种。它可以用于舍入 BigDecimal 中的数字。结果将被舍入到一个较小的值。下面是一个简单的示例:

import java.math.BigDecimal;
import java.math.RoundingMode;
public class RoundingModeDemo {
    public static void main(String[] args) {
        BigDecimal num = new BigDecimal("3.9996");
        BigDecimal result1 = num.setScale(2, RoundingMode.FLOOR);
        BigDecimal result2 = num.setScale(3, RoundingMode.FLOOR);
        System.out.println(result1); // 3.99
        System.out.println(result2); // 3.999
    }
}

在此代码中,我们将数字 3.9996 舍入到小数点后两位或小数点后三位,并使用了RoundingMode.FLOOR选择舍入方法,结果将被舍入到一个较小的值。

八、小结

在 Java 中,RoundingMode 是一个非常有用的类,它提供了多种舍入模式以满足多种舍入需求。对于舍入行为,应该根据具体的需求情况选择相应的舍入方式。在编写代码时,在选择适当的舍入方式后,应避免使用浮点数和其他带小数的基本类型进行计算,从而保证计算的精确性。