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