//num--需要进行处理的数值
//scale--保留小数点后的位数
//roundingMode--保留小数点后几位采取舍入策略
public static double siSheWuRuByBigDecimal(double num,int scale,int roundingMode) {
//在保留的位数中后面的零,BigDecimal不保留
BigDecimal b = new BigDecimal(new Double(num).toString());
return b.setScale(scale, roundingMode).doubleValue();
}
public static void main(String[] args) {
String num = siSheWuRuByBigDecimal(212.05000,0,BigDecimal.ROUND_HALF_UP)+"";
String num1 = siSheWuRuByBigDecimal(212.05000,1,BigDecimal.ROUND_HALF_UP)+"";
String num2 = siSheWuRuByBigDecimal(212.05000,2,BigDecimal.ROUND_HALF_UP)+"";
String num3 = siSheWuRuByBigDecimal(212.05000,3,BigDecimal.ROUND_HALF_UP)+"";
String num4 = siSheWuRuByBigDecimal(212.05000,4,BigDecimal.ROUND_HALF_UP)+"";
String num5 = siSheWuRuByBigDecimal(212.05001,5,BigDecimal.ROUND_HALF_UP)+"";
String num6 = siSheWuRuByBigDecimal(212.0500001,6,BigDecimal.ROUND_HALF_UP)+"";
System.out.println(num);
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
System.out.println(num4);
System.out.println(num5);
System.out.println(num6);
}
运行结果如下:
由此可见,BigDecimal的setScale方法不会保留无效位的零,只会保留有效数字。
那如果在显示的时候一定要以保留要求的位数显示,那就可以使用DecimalFormat了。
//num--需要进行处理的数值
//scale--保留小数点后的位数
//roundingMode--保留小数点后几位采取舍入策略
public static double siSheWuRuByBigDecimal(double num,int scale,int roundingMode) {
//在保留的位数中后面的零,BigDecimal不保留
BigDecimal b = new BigDecimal(new Double(num).toString());
return b.setScale(scale, roundingMode).doubleValue();
}
public static void main(String[] args) {
String num = siSheWuRuByBigDecimal(212.05000,0,BigDecimal.ROUND_HALF_UP)+"";
String num1 = siSheWuRuByBigDecimal(212.05000,1,BigDecimal.ROUND_HALF_UP)+"";
String num2 = siSheWuRuByBigDecimal(212.05000,2,BigDecimal.ROUND_HALF_UP)+"";
String num3 = siSheWuRuByBigDecimal(212.05000,3,BigDecimal.ROUND_HALF_UP)+"";
String num4 = siSheWuRuByBigDecimal(212.05000,4,BigDecimal.ROUND_HALF_UP)+"";
String num5 = siSheWuRuByBigDecimal(212.05001,5,BigDecimal.ROUND_HALF_UP)+"";
String num6 = siSheWuRuByBigDecimal(212.0500001,6,BigDecimal.ROUND_HALF_UP)+"";
System.out.println(num);
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
System.out.println(num4);
System.out.println(num5);
System.out.println(num6);
System.out.println();
double num00 = siSheWuRuByBigDecimal(212.05000,0,BigDecimal.ROUND_HALF_UP);
double num01 = siSheWuRuByBigDecimal(212.05000,1,BigDecimal.ROUND_HALF_UP);
double num02 = siSheWuRuByBigDecimal(212.05000,2,BigDecimal.ROUND_HALF_UP);
double num03 = siSheWuRuByBigDecimal(212.05000,3,BigDecimal.ROUND_HALF_UP);
double num04 = siSheWuRuByBigDecimal(212.05000,4,BigDecimal.ROUND_HALF_UP);
double num05 = siSheWuRuByBigDecimal(212.05001,5,BigDecimal.ROUND_HALF_UP);
double num06 = siSheWuRuByBigDecimal(212.0500001,6,BigDecimal.ROUND_HALF_UP);
DecimalFormat df = new DecimalFormat("###.0000000");
String format00 = df.format(num00);
String format01 = df.format(num01);
String format02= df.format(num02);
String format03 =df.format(num03);
String format04 = df.format(num04);
String format05 = df.format(num05);
String format06 = df.format(num06);
System.out.println(format00);
System.out.println(format01);
System.out.println(format02);
System.out.println(format03);
System.out.println(format04);
System.out.println(format05);
System.out.println(format06);
}
输出如下所示,