RoundingMode

1,178 阅读2分钟

UP

/**

  • 舍入位非0-->舍入位前一位加1

  • 舍入位0-->则直接舍弃

*/

public static void up(){

    BigDecimal a = BigDecimal.valueOf(2.56222);

    System.out.println(a.setScale(0,RoundingMode.UP));

}

运行结果: 3

public static void up2(){

    BigDecimal a = BigDecimal.valueOf(2.01);

    System.out.println(a.setScale(0,RoundingMode.UP));

}

运行结果:3

public static void up3(){

    BigDecimal a = BigDecimal.valueOf(2.46222);

    System.out.println(a.setScale(0,RoundingMode.UP));

}

运行结果:3

public static void up4(){

    BigDecimal a = BigDecimal.valueOf(2.00);

    System.out.println(a.setScale(0,RoundingMode.UP));

}

运行结果:2

DOWN

/**

  • 不论舍入位是否为零,都直接舍弃。

*/

public static void down(){

    BigDecimal a = BigDecimal.valueOf(2.60);

    System.out.println(a.setScale(0,RoundingMode.DOWN));

}

运行结果:2

CEILING

/**

  • 若 BigDecimal 为正,则舍入行为与 ROUND_UP 相同;若为负,则舍入行为与 ROUND_DOWN 相同

*/

public static void ceiling(){

    BigDecimal a = BigDecimal.valueOf(2.10);

    System.out.println(a.setScale(0,RoundingMode.CEILING));

}

运行结果:3

public static void ceiling2(){

    BigDecimal a = BigDecimal.valueOf(-2.10);

    System.out.println(a.setScale(0,RoundingMode.CEILING));

}

运行结果:-2

FLOOR

/**

  • 若 BigDecimal 为正,则舍入行为与 ROUND_DOWN 相同;若为负,则舍入行为与 ROUND_UP 相同

*/

public static void floor(){

    BigDecimal a = BigDecimal.valueOf(2.10);

    System.out.println(a.setScale(0,RoundingMode.FLOOR));

}

运行结果:2

public static void floor2(){

    BigDecimal a = BigDecimal.valueOf(-2.10);

    System.out.println(a.setScale(0,RoundingMode.FLOOR));

}  

运行结果:-3

HALF_UP

/**

  • 若舍入位>=5,则对舍入部分的前一位数字加1;若舍入位<5,则直接舍弃。

*/

public static void halfUp(){

    BigDecimal a = BigDecimal.valueOf(2.5);

    System.out.println(a.setScale(0,RoundingMode.HALF_UP));

}

运行结果:3

public static void halfUp2(){

    BigDecimal a = BigDecimal.valueOf(2.46222);

    System.out.println(a.setScale(0,RoundingMode.HALF_UP));

}

运行结果:2

HALF_DOWN

/**

  • 舍入位<=5 直接舍去 >5则对舍入部分的前一位数字加1

*/

public static void halfDown(){

    BigDecimal a = BigDecimal.valueOf(2.462);

    System.out.println(a.setScale(0,RoundingMode.HALF_DOWN));

}

运行结果:2

public static void halfDown2(){


    BigDecimal a = BigDecimal.valueOf(2.50);

    System.out.println(a.setScale(0,RoundingMode.HALF_DOWN));

}

运行结果:2

HALF_EVEN

/**

  • 若(舍入位大于5)或者(舍入位等于5且前一位为奇数),则对舍入部分的前一位数字加1;

  • 若(舍入位小于5)或者(舍入位等于5且前一位为偶数),则直接舍弃。

*/

public static void halfEven(){

    BigDecimal a = BigDecimal.valueOf(3.562);

    System.out.println(a.setScale(0,RoundingMode.HALF_EVEN));

}

运行结果:4

public static void halfEven3(){

    BigDecimal a = BigDecimal.valueOf(2.662);

    System.out.println(a.setScale(0,RoundingMode.HALF_EVEN));

}

运行结果:3

public static void halfEven4(){

    BigDecimal a = BigDecimal.valueOf(2.462);

    System.out.println(a.setScale(0,RoundingMode.HALF_EVEN));

}

运行结果:2

public static void halfEven2(){

    BigDecimal a = BigDecimal.valueOf(2.5);

    System.out.println(a.setScale(0,RoundingMode.HALF_EVEN));

}

运行结果:2

UNNECESSARY

/**

  • 断言请求的操作具有精确的结果,因此不需要舍入。

  • 如果对获得精确结果的操作指定此舍入模式,则抛出ArithmeticException。

*/

public static void unnecessary(){

    BigDecimal a = BigDecimal.valueOf(2);

    System.out.println(a.setScale(0,RoundingMode.UNNECESSARY));

}

运行结果:2

public static void unnecessary2(){

    BigDecimal a = BigDecimal.valueOf(2.1);

    System.out.println(a.setScale(0,RoundingMode.UNNECESSARY));

}

运行结果:Exception in thread "main" java.lang.ArithmeticException: Rounding necessary