BigDecimal 小数舍入模式
public static void main(String[] args) {
log.info("启动");
BigDecimal num = new BigDecimal("123.4567");//255.4631取值小数点后的位数
//取值小数点后的位数
System.out.println(num.scale());//结果:4
//取值并保留一位小数,直接删除多余的小数位
System.out.println(num.setScale(1, BigDecimal.ROUND_DOWN));//结果:123.4
//取值并保留一位小数,进位处理
System.out.println(num.setScale(1, BigDecimal.ROUND_UP));//结果:123.5
num = new BigDecimal("3.45");//1.35
//取值并保留一位小数,四舍五入 向下舍
System.out.println(num.setScale(1, BigDecimal.ROUND_HALF_DOWN));//结果:3.4
//取值并保留一位小数,四舍五入 向上舍
System.out.println(num.setScale(1, BigDecimal.ROUND_HALF_UP));//结果:3.5
}
-
ROUND_CEILING //向正无穷方向舍入
-
ROUND_DOWN //向零方向舍入
-
ROUND_FLOOR //向负无穷方向舍入
-
ROUND_HALF_DOWN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5
-
ROUND_HALF_EVEN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN
-
ROUND_HALF_UP //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6
-
ROUND_UNNECESSARY //计算结果是精确的,不需要舍入模式
-
ROUND_UP //向远离0的方向舍入
-
需要对BigDecimal进行截断和四舍五入可用setScale方法,例:
public static void main(String[] args){
BigDecimal num = new BigDecimal("12.3456");
num = num .setScale(3, RoundingMode.HALF_UP);//保留3位小数,且四舍五入
System.out.println(num);//结果:12.346
}