Java中數據格式化類DecimalFormat中八種舍入模式(Rounding Mode)


Java中數據格式化類DecimalFormat中八種舍入模式(Rounding Mode)


DecimalFormat用法:

    double value = 11110.82;
    //舍入模式
    RoundingMode roundingMode = RoundingMode.HALF_UP;
    DecimalFormat df = new DecimalFormat("###,###.0");
    df.setRoundingMode(roundingMode);
    String result =  df.format(value);
    System.out.println(result);

RoundingMode共有八種,分別如下:

1.  UP與DOWN的區別

RoundingMode.UP: 向遠離零點方向舍入

RoundingMode.DOWN: 向零點方向舍入(截斷數字)

假設保留整數,例子如下:

UP DOWN
-1.5 -2 -1
-0.3 -1 0
0 0 0
0.3 1 0
1.5 2 1

2.  CEILING和FLOOR的區別

RoundingMode.CEILING: 向正無窮方法舍入

RoundingMode.FLOOR: 向負無窮方向舍入

假設保留整數,例子如下:

CEILING FLOOR
-1.5 -1 -2
-0.3 0 -1
0 0 0
0.3 1 0
1.5 2 1

3.  HALF_UP、HALF_DOWN和HALF_EVEN區別

假設要處理的那一位數字為n,

如果n大於5,則和RoundingMode.UP舍入方式一致,向遠離零點方向舍入

如果n小於5, 則和RoundingMode.DOWN舍入方式一致,向零點方向舍入。

如果n等於5,

​ RoundingMode.HALF_UP: 向遠離零點方向舍入;(通常意義上的四舍五入)

​ RoundingMode.HALF_DOWN: 向零點方向舍入;

​ RoundingMode.HALF_EVEN: 取最近兩個數中的偶數;

假設保留整數,例子如下:

HALF_UP HALF_DOWN HALF_EVEN
-1.6 -2 -2 -2
-1.5 -2 -1 -2
-0.5 -1 0 0
-0.3 0 0 0
0.3 0 0 0
0.5 1 0 0
1.5 2 1 2
1.6 2 2 2

附測試代碼:

public class Test {
    public static void main(String[] args) throws Exception {
        RoundingMode[] modes = {RoundingMode.HALF_UP, RoundingMode.HALF_DOWN, RoundingMode.HALF_EVEN};
        double[] values = {-1.6, -1.5, -0.5, -0.3, 0.3, 0.5, 1.5, 1.6};
        test(values, modes);
    }

    private static void test(double[] values, RoundingMode[] modes) {
        for (double value : values) {
            System.out.println();
            for (RoundingMode mode : modes) {
                System.out.print(fix(value, mode) + " ");
            }
        }
    }

    private static String fix(double value, RoundingMode mode) {
        DecimalFormat df = new DecimalFormat("###,###");
        df.setRoundingMode(mode);
        return df.format(value);
    }
}

4. UNNECESSARY作用

RoundingMode.UNNECESSARY: 只有當要處理的那一位數字為零時不拋出異常,並進行處理, 其他情況都會拋出異常。
假設保留整數,例子如下:

UNNECESSARY
-1.2 throw ArithmeticException
-1.0 -1
0 0
1.0 1
1.2 throw ArithmeticException

測試代碼如下:

import java.math.RoundingMode;
import java.text.DecimalFormat;

public class Test {
    public static void main(String[] args) throws Exception {
        RoundingMode[] modes = {RoundingMode.HALF_UP, RoundingMode.HALF_DOWN, RoundingMode.HALF_EVEN};
        double[] values = {-1.6, -1.5, -0.5, -0.3, 0.3, 0.5, 1.5, 1.6};
        test(values, modes);
    }

    private static void test(double[] values, RoundingMode[] modes) {
        for (double value : values) {
            System.out.println();
            for (RoundingMode mode : modes) {
                System.out.print(fix(value, mode) + " ");
            }
        }
    }

    private static String fix(double value, RoundingMode mode) {
        DecimalFormat df = new DecimalFormat("###,###");
        df.setRoundingMode(mode);
        return df.format(value);
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM