前言
在Java开发过程中,我们经常会遇到需要保留double类型的数字的位数问题,这里以保存两位小数为例,阐述一下Java开发中,保留小数点后小数位数问题的几种做法。
1、 使用DecimalFormat类
用0.00表示两位小数
double a = 100.2365;
double b = 200.1
DecimalFormat df = new DecimalFormat("0.00");
System.out.println(df.format(a));
System.out.println(df.format(b));
输出:
100.24
200.10
使用#.##表示两位小数
double a = 100.2365;
double b = 200.1
DecimalFormat df = new DecimalFormat("#.##");
System.out.println(df.format(a));
System.out.println(df.format(b));
输出:
100.24
200.1
1
2
这个和用0.00表示的不同的地方是,#.## 如果精度没有到百分位,就保留一位小数,或者不保留,但是使用0.00 的话,没有达到精度的以0补齐。
2、使用String.format方法
double a = 100.2365;
double b = 200.1;
System.out.println(String.format("%.2f",a));
System.out.println(String.format("%.2f",b));
1
2
3
4
这个无论传入什么值,均保留两位小数,和方法一中的0.00使用效果类似
3、使用BigDecimal类
double a = 100.2365;
double b = 200.1;
BigDecimal bigDecimal1 = new BigDecimal(a);
BigDecimal bigDecimal2 = new BigDecimal(b);
double a1 = bigDecimal1.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
double b1 = bigDecimal2.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println(a1);
System.out.println(b1);
总结
关于保留几位小数的问题,感觉第一种和第二种方法比较好操作,第三种方法就代码有些复杂了。
原文:https://blog.csdn.net/zhanghanlun/article/details/83339817