需要格式化输出double数值,精度为小数点后两位。似乎有很多种方法,但是我只想到了String.format(),惭愧,回家把其他方法的整理了一下。
double dd = 32.2553;
//最简洁,利用类型转型转换
System.out.println(Math.round(dd * 100)/100.0);
//--output 32.26
//不太好看的,利用大数类的方法
BigDecimal bd = new BigDecimal(dd);
System.out.println(bd.setScale(2, RoundingMode.HALF_UP));
//--output 32.26
//通用的格式化方法,万能类型转换和格式化
System.out.println(String.format("%1$.2f",dd));
//--output 32.26
//最专业格式化,还可以利用父类NumberFormat设置Locale
DecimalFormat df1 = new DecimalFormat("#0.00");
System.out.println(df1.format(dd));
//--output 32.26
//针对百分比,但是我需要按百分百里的数字排序而不是字典序
DecimalFormat df2 = (DecimalFormat)DecimalFormat.getPercentInstance();
df2.setMaximumFractionDigits(2);
System.out.println(df2.format(0.45332));
//--output 45.33%
我常常想JDK
版本更新挺快,新类库总是更加漂亮和强大,是不是以后可以渐渐忘掉一些不好用的老类库呢~比如记住java.util.Formatter的各种格式化符就可以代替各种老的DateFormat还有NumberFormat什么的了...