BigDecimal.setScale(int newScale, int roundingMode);的使用

newScale: 保留newScale位小數

roundingMode: 捨去規則(0 <= roundingMode <= 7)

分別有8個常量

ROUND_UP(0):第newScale位小數進1,後面捨去

        BigDecimal b1 = new BigDecimal(3.1415926);
        BigDecimal b2 = b1.setScale(2, BigDecimal.ROUND_UP);
        System.out.println(b2);// 3.15

ROUND_DOWN(1):第newScale位後面的,直接捨去

        BigDecimal b1 = new BigDecimal(3.1415926);
        BigDecimal b2 = b1.setScale(2, BigDecimal.ROUND_DOWN);
        System.out.println(b2);// 3.14

ROUND_CEILING(2):如果是正數,同ROUND_UP,如果是負數,同ROUND_DOWN

        BigDecimal b1 = new BigDecimal(3.1415926);
        BigDecimal b2 = b1.setScale(2, BigDecimal.ROUND_CEILING);
        System.out.println(b2);// 3.15
            
        b1 = new BigDecimal(-3.1415926);
        b2 = b1.setScale(2, BigDecimal.ROUND_CEILING);
        System.out.println(b2);// -3.14

ROUND_FLOOR(3):與ROUND_CEILING相反

        BigDecimal b1 = new BigDecimal(3.1415926);
        BigDecimal b2 = b1.setScale(2, BigDecimal.ROUND_FLOOR);
        System.out.println(b2);// 3.14
            
        b1 = new BigDecimal(-3.1415926);
        b2 = b1.setScale(2, BigDecimal.ROUND_FLOOR);
        System.out.println(b2);// -3.15

ROUND_HALF_UP(4):四捨五入:小學學過的那種

        BigDecimal b1 = new BigDecimal(3.1415926);
        BigDecimal b2 = b1.setScale(2, BigDecimal.ROUND_HALF_UP);
        System.out.println(b2);// 3.14
            
        b1 = new BigDecimal(3.1455926);
        b2 = b1.setScale(2, BigDecimal.ROUND_HALF_UP);
        System.out.println(b2);// 3.15

ROUND_HALF_DOWN(5):另一種四捨五入:捨去部分 > 0.5時,表現爲ROUND_UP,否則表現爲ROUND_DOWN

        BigDecimal b1 = new BigDecimal(3.55);
        System.out.println(b1);// 3.54999999999999982236431605997495353221893310546875
        BigDecimal b2 = b1.setScale(1, BigDecimal.ROUND_HALF_DOWN);
        System.out.println(b2);// 3.5
            
        b1 = new BigDecimal(3.551);
        System.out.println(b1);// 3.5510000000000001563194018672220408916473388671875
        b2 = b1.setScale(1, BigDecimal.ROUND_HALF_DOWN);
        System.out.println(b2);// 3.6

ROUND_HALF_EVEN(6):捨去部分左邊爲奇數:表現爲ROUND_HALF_UP;偶數:表現爲ROUND_HALF_DOWN

        BigDecimal b1 = new BigDecimal(3.55);
        System.out.println(b1);// 3.54999999999999982236431605997495353221893310546875
        BigDecimal b2 = b1.setScale(1, BigDecimal.ROUND_HALF_EVEN);// 捨去部分從4開始,4是偶數
        System.out.println(b2);// 3.5
            
        b1 = new BigDecimal(3.551);
        System.out.println(b1);// 3.5510000000000001563194018672220408916473388671875
        b2 = b1.setScale(1, BigDecimal.ROUND_HALF_EVEN);
        System.out.println(b2);// 3.6

ROUND_UNNECESSARY(7):

        Rounding mode to assert that the requested operation has an exactresult, hence no rounding is necessary. If this rounding mode isspecified on an operation that yields an inexact result, an ArithmeticException is thrown.

        舍入模式斷言請求的操作具有精確結果,因此不需要舍入。 如果在產生不精確結果的操作上指定了此舍入模式,則拋出ArithmeticException。

BigDecimal.abs();返回BigDecimal:絕對值

BigDecimal.negate();返回BigDecimal:相反數
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章