public static void main(String[] args) {
BigDecimal num= new BigDecimal("12.355");
BigDecimal num1= new BigDecimal("12.354");
//在精度最后一位加一个单位
BigDecimal a_round_up = num.setScale(2,BigDecimal.ROUND_UP);
BigDecimal a_round_up1 = num1.setScale(2,BigDecimal.ROUND_UP);
System.out.println("向上取精度,原值:"+num+"结果值:"+a_round_up);
System.out.println("向上取精度,原值:"+num+"结果值:"+a_round_up1);
//截端操作
BigDecimal a_round_down = num.setScale(2,BigDecimal.ROUND_DOWN);
BigDecimal a_round_down1 = num1.setScale(2,BigDecimal.ROUND_DOWN);
System.out.println("截端操作,原值:"+num+"结果值:"+a_round_down);
System.out.println("截端操作,原值:"+num+"结果值:"+a_round_down1);
//朝正无穷方向round 如果为正数,行为和round_up一样,如果为负数,行为和round_down一样
BigDecimal round_ceiling = num.setScale(2,BigDecimal.ROUND_CEILING);
BigDecimal round_ceiling1 = num1.setScale(2,BigDecimal.ROUND_CEILING);
System.out.println("朝正无穷方向round,原值:"+num+"结果值:"+round_ceiling);
System.out.println("朝正无穷方向round,原值:"+num+"结果值:"+round_ceiling1);
//朝负无穷方向round 如果为正数,行为和round_down一样,如果为负数,行为和round_up一样
BigDecimal round_floor = num.setScale(2,BigDecimal.ROUND_FLOOR);
BigDecimal round_floor1 = num1.setScale(2,BigDecimal.ROUND_FLOOR);
System.out.println("朝负无穷方向round,原值:"+num+"结果值:"+round_floor);
System.out.println("朝负无穷方向round,原值:"+num+"结果值:"+round_floor1);
//遇到.5的情况时往下近似,例: 1.5 ->;1 注:1.51->2,只取最后一位向下近似
BigDecimal roundHalfUp = num.setScale(2,BigDecimal.ROUND_HALF_DOWN);
BigDecimal roundHalfUp1 = num1.setScale(1,BigDecimal.ROUND_HALF_DOWN);
System.out.println("向下近似,原值:"+num+"结果值:"+roundHalfUp);
System.out.println("向下近似,原值:"+num+"结果值:"+roundHalfUp1);
//遇到.5的情况时往上近似,例: 1.5 ->;2,正常的四舍五入
BigDecimal round_half_up = num.setScale(2,BigDecimal.ROUND_HALF_UP);
BigDecimal round_half_up1 = num1.setScale(2,BigDecimal.ROUND_HALF_UP);
System.out.println("向上近似,原值:"+num+"结果值:"+round_half_up);
System.out.println("向上近似,原值:"+num+"结果值:"+round_half_up1);
//如果舍弃部分左边的数字为奇数,则作 ROUND_HALF_UP ;如果它为偶数,则作 ROUND_HALF_DOWN
BigDecimal round_half_even = num.setScale(2,BigDecimal.ROUND_HALF_EVEN);
BigDecimal round_half_even1 = num1.setScale(2,BigDecimal.ROUND_HALF_EVEN);
System.out.println("向上取精度,原值:"+num+"结果值:"+round_half_even);
System.out.println("向上取精度,原值:"+num+"结果值:"+round_half_even1);
//非正常四舍五入向上取精度
BigDecimal unnum = new BigDecimal(130.1254);
BigDecimal bigDecimal = unRoundHalf(2, BigDecimal.ROUND_UP, unnum);
System.out.println(bigDecimal);
//向下取精度
//非正常四舍五入
BigDecimal unnum1 = new BigDecimal(130.1254);
BigDecimal bigDecimal1 = unRoundHalf(2, BigDecimal.ROUND_HALF_UP, unnum1);
System.out.println(bigDecimal1);
//正常四舍五入
}
/**
* 只取精确位数的后一位取精度
* @param scale 精确小数位数
* @param roundType 精确类型:
* BigDecimal.ROUND_UP:向上取精度,153.1211-->153.13,153.1201-->153.12
* BigDecimal.ROUND_HALF_UP:四舍五入,153.1211-->153.12,153.1251-->153.13
* @param num
* @return
*/
public static BigDecimal unRoundHalf(int scale,int roundType,BigDecimal num){
int newScale = scale+1;
BigDecimal newNum = num.setScale(newScale,BigDecimal.ROUND_DOWN);
newNum = newNum.setScale(scale,roundType);
return newNum;
}