1. 程式人生 > >JAVA 四捨六入

JAVA 四捨六入

規則:
四捨六入五考慮,
五後非零就進一,
五後皆零看奇偶,
五前為偶應捨去,

五前為奇要進一。

為了避免四捨五入規則造成的結果偏高,誤差偏大的現象出現,一般採用四捨六入五留雙規則。

        // 1.當尾數小於或等於4時,直接將尾數捨去
        System.out.println("10.2731: " + new BigDecimal("10.2731").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 10.2731: 10.27
        System.out.println("18.5049: " + new BigDecimal("18.5049").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 18.5049: 18.50
        System.out.println("16.4005: " + new BigDecimal("16.4005").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 16.4005: 16.40
        System.out.println("27.1829: " + new BigDecimal("27.1829").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 27.1829: 27.18

        // 2.當尾數大於或等於6時將尾數捨去向前一位進位
        System.out.println("16.7777: " + new BigDecimal("16.7777").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 16.7777: 16.78
        System.out.println("10.29501: " + new BigDecimal("10.29501").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 10.29501: 10.30
        System.out.println("21.0191: " + new BigDecimal("21.0191").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 21.0191: 21.02

        // 3.當尾數為5,而尾數後面的數字均為0時,應看尾數“5”的前一位:若前一位數字此時為奇數,就應向前進一位;若前一位數字此時為偶數,則應將尾數捨去。數字“0”在此時應被視為偶數。
        System.out.println("12.6450: " + new BigDecimal("12.6450").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 12.6450: 12.64
        System.out.println("18.2750: " + new BigDecimal("18.2750").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 18.2750: 18.28
        System.out.println("12.7350: " + new BigDecimal("12.7350").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 12.7350: 12.74
        System.out.println("21.845000: " + new BigDecimal("21.845000").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 21.845000: 21.84

        // 4.當尾數為5,而尾數“5”的後面還有任何不是0的數字時,無論前一位在此時為奇數還是偶數,也無論“5”後面不為0的數字在哪一位上,都應向前進一位。
        System.out.println("12.73507: " + new BigDecimal("12.73507").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 12.73507: 12.74
        System.out.println("21.84502: " + new BigDecimal("21.84502").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 21.84502: 21.85
        System.out.println("12.64501: " + new BigDecimal("12.64501").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 12.64501: 12.65
        System.out.println("18.27509: " + new BigDecimal("18.27509").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 18.27509: 18.28
        System.out.println("38.305000001: " + new BigDecimal("38.305000001").setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 38.305000001: 38.31