DecimalFormat 还是比较稳定和好用的 。少bug .
BigDecimal 类也有 四舍五入 ,和 保留 多少位小数 等等方法。 比如 ROUND_HALF_UP 可是 在使用的时候,还是比较难用,在某些情况下面 ,还是 会有多位小数的。 比如下面的我自己测试的 demo 不知道为什么 BigDecimal 不能保留 2位小数, DecimalFormat 可以保留2位小数,而且很好用啊,变字符串什么的,也可以通过字符串变其他 类型。好用多了。
double total =0.00;
total=total+ 3
*0.01*30;
BigDecimal bigDecimal=new BigDecimal(total);
DecimalFormat df = new DecimalFormat("#########0.##");
df.setRoundingMode(RoundingMode.HALF_UP); //保留2位小数 ,不足不补0
System.out.println(">>>>"+df.format(total));
bigDecimal.setScale(2,BigDecimal.ROUND_HALF_UP);
System.out.println(bigDecimal.toString());
BigDecimal totalScore=new BigDecimal("0.00");
totalScore=totalScore.add(bigDecimal);
double change = bigDecimal.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
BigDecimal changeDecimal=new BigDecimal(change);
System.out.println(changeDecimal.toString());
DecimalFormat df1 = new DecimalFormat("###0.00") ; //保留两位小数,如果不足两位小数则自动补零
System.out.println(df1.format(124.367));
System.out.println(df1.format(124.3));
DecimalFormat df2 = new DecimalFormat("###0.##") ; //保留两位小数,不足两位则不补零
System.out.println(df2.format(124.6));
System.out.println(df2.format(124));
以下是保留两位小数,同时四舍五入,然后小数点前从右到作,3位一个逗号分隔符
float scale = (float) 3434567;
DecimalFormat fnum = new DecimalFormat("###,##0.00");
String dd=fnum.format(scale);
System.out.println(dd);//3,434,567.00
参考地址: http://blog.csdn.net/yansong_8686/article/details/27407513