省略小数点后*位 - BigDecimal

准备工作

Double number = 1.2345678;
BigDecimal bigDecimal = new BigDecimal(number);//将Double转换为BigDecimal格式
int count = bigDecimal.scale();
System.out.println(count);//6 返回的是小数点后位数

四舍五入:BigDecimal.ROUND_HALF_UP

Double num = bigDecimal.setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue();//保留3位小数
System.out.println(num);//1.235

进位处理:BigDecimal.ROUND_UP

Double num1 = bigDecimal.setScale(2,BigDecimal.ROUND_UP).doubleValue();//保留2位小数
System.out.println(num1);//1.24

去掉多余的位数:BigDecimal.ROUND_DOWN

Double num2 = bigDecimal.setScale(3,BigDecimal.ROUND_DOWN).doubleValue();//保留3位小数
System.out.println(num2);//1.234

BigDecimal. ROUND_CEILING

BigDecimal f = new BigDecimal("2.224667").setScale(2, BigDecimal.ROUND_CEILING);//保留2位小数
System.out.println(f);//2.23 如果是正数,相当于BigDecimal.ROUND_UP
BigDecimal g = new BigDecimal("-2.225667").setScale(2, BigDecimal.ROUND_CEILING);//保留2位小数
System.out.println(g);//-2.22 如果是负数,相当于BigDecimal.ROUND_DOWN

BigDecimal. ROUND_FLOOR

BigDecimal h = new BigDecimal("2.225667").setScale(2, BigDecimal.ROUND_FLOOR);
System.out.println(h);//2.22 如果是正数,相当于BigDecimal.ROUND_DOWN
BigDecimal i = new BigDecimal("-2.224667").setScale(2, BigDecimal.ROUND_FLOOR);
System.out.println(i);//-2.23 如果是负数,相当于BigDecimal.ROUND_HALF_UP

BigDecimal. ROUND_HALF_DOWN

BigDecimal e = new BigDecimal("2.225").setScale(2, BigDecimal.ROUND_HALF_DOWN);
System.out.println(e);//2.22  四舍五入(若舍弃部分>.5,就进位)

BigDecimal. ROUND_FLOOR

BigDecimal h = new BigDecimal("2.225667").setScale(2, BigDecimal.ROUND_FLOOR);
System.out.println(h);//2.22 如果是正数,相当于BigDecimal.ROUND_DOWN

BigDecimal. ROUND_HALF_EVEN

BigDecimal j = new BigDecimal("2.225").setScale(2, BigDecimal.ROUND_HALF_EVEN);
System.out.println(j);//2.22 如果舍弃部分左边的数字为偶数,则作   ROUND_HALF_DOWN
BigDecimal k = new BigDecimal("2.215").setScale(2, BigDecimal.ROUND_HALF_EVEN);
System.out.println(k);//2.22 如果舍弃部分左边的数字为奇数,则作   ROUND_HALF_UP

BigDecimal. ROUND_UNNECESSARY

BigDecimal l = new BigDecimal("2.215").setScale(3, BigDecimal.ROUND_UNNECESSARY);
System.out.println(l);
//断言请求的操作具有精确的结果,因此不需要舍入。
//如果对获得精确结果的操作指定此舍入模式,则抛出ArithmeticException。

返回小数点后位数:

String number = "1.2345678";
BigDecimal bigDecimal = new BigDecimal(number);//将String转换为BigDecimal格式
int count = bigDecimal.scale();
System.out.println(count);//7 返回的是小数点后位数