保留小数点相关问题

一,保留两位小数常用的几种方法

1,使用 java.util.Formatter 类

public static String format2(double value) {
        /*
         * %.2f % 表示 小数点前任意位数 2 表示两位小数 格式后的结果为 f 表示浮点型
         */
        return new Formatter().format("%.2f", value).toString();
    }

  2,使用String的format方法

    public static String format2(double value) {
        return String.format("%.2f", value).toString();
    }

  3,用DecimalFormat的format方法;

double f = 111231.5585;
DecimalFormat df = new DecimalFormat("#.00");            
System.out.println(df.format(f));

  说明:

.00:四舍五入保留两位小数。满足2时,整数位不显示
#.00:四舍五入保留两位小数。满足2时,整数位不显示
0.00:四舍五入保留两位小数。不够位数则补0
#.##:四舍五入保留两位小数。不够位数时不处理
%.2f:四舍五入保留两位小数。不够位数则补0
BigDecimal :四舍五入保留两位小数。不够位数时不处理
NumberFormat:四舍五入保留两位小数。不够位数时不处理

解释一下"0"和"#"的区别:
0:
  数字少了,会补“0”,小数和整数都会补0;
  数字多了,做切割,只切小数的末尾,不切整数位;
#:
  数字少了,则不处理;
  数字多了,做切割,只切小数的末尾,不切整数位;

例如:

有两类(四种)情况:
1.a>1
2. 0<a<1
3. 待转换的数据,其小数长度大于指定保留的位数(eg:a = 12.235534,保留2位)
4.待转换的数据,其小数长度小于指定保留的位数(eg:a = 12.2,保留2位)

double a = 12.235534;
//法1  四舍五入保留两位小数,可以增删小数点后0的个数来修改需要保留的小数个数
DecimalFormat decimalFormat = new DecimalFormat(".00");
System.out.println(".00:" + decimalFormat.format(a));

//法2  四舍五入保留两位小数,可以增删小数点后0的个数来修改需要保留的小数个数
DecimalFormat decimalFormat2 = new DecimalFormat("#.00");
System.out.println("#.00:" + decimalFormat2.format(a));

//法3  四舍五入保留两位小数,可以增删小数点后0的个数来修改需要保留的小数个数
DecimalFormat decimalFormat3 = new DecimalFormat("0.00");
System.out.println("0.00:" + decimalFormat3.format(a));

//法4  四舍五入保留两位小数,可以增删小数点后#的个数来修改需要保留的小数个数
//note:如果只有1位小数,结果仅保留1位小数,后面不会补0
DecimalFormat decimalFormat4 = new DecimalFormat("#.##");
System.out.println("#.##:" + decimalFormat4.format(a));

//法5  四舍五入保留两位小数,可以修改f前的数字修改需要保留的小数个数
System.out.println("%.2f:" + String.format("%.2f", a));

//法6  四舍五入保留两位小数,可以修改setScale内的第一个参数数字修改需要保留的小数个数
//note:如果只有1位小数,结果仅保留1位小数,后面不会补0
BigDecimal b = new BigDecimal(a);
double d = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println("BigDecimal:" + d);

//法7  四舍五入保留两位小数,可以修改setMaximumFractionDigits数字修改需要保留的小数个数
//note:如果只有1位小数,结果仅保留1位小数,后面不会补0
NumberFormat f = NumberFormat.getNumberInstance();
f.setMaximumFractionDigits(2);
System.out.println("NumberFormat:" + f.format(a));

  

 1.假设已有待转换数据:double a = 12.235534 满足条件1、3

结果如下:

 

2.假设已有待转换数据:double a = 0.235534 满足条件2、3
同样执行上面7种方式,你就会发现不同
结果如下:

3.假设已有待转换数据:double a = 0.2 满足条件2、4
同样执行上面7种方式,你就会发现不同
结果如下:

4.假设已有待转换数据:double a = 12.2 满足条件1、4
同样执行上面7种方式,你就会发现不同
结果如下:

 

 

posted @ 2023-02-12 22:11  张亮java  阅读(269)  评论(0编辑  收藏  举报