double保留两位小数的不同方法:
1、简单的四舍五入方法:
/**
*需要n位小数就乘以10的n次方再除以n次方
*通过round和round2的输出可以发现round2会精度缺失
*所以我们在进行计算之后再取小数点后的位数
*/
public static double formatDouble(double percent){
double round = (double) Math.round(percent * 100) / 100;
double round2 = round + 0.1;
System.out.println("round:"+round);
System.out.println("round2:"+round2);
return round;
}
2、通过BigDecimal
/**
*发现个奇怪的问题,这个方法的四舍五入不算真正的四舍五入,只要后面一位有值就会往前进一位,
*例如:123.3333取两位小数之后是123.34。
*/
public static double formatDouble2(double d){
//旧的方法,不推荐使用
BigDecimal bd = new BigDecimal(d).setScale(2,BigDecimal.ROUND_HALF_UP);
//新的方法,如果不需要四舍五入可以使用RoundingMode.DOWN
BigDecimal bd = new BigDecimal(d).setScale(2,RoundingMode.UP);
return bd.doubleValue();
}
3、通过NumberFormat
/**
*这个方法的四舍五入也是不算真正的四舍五入,只要后面一位有值就会往前进一位,
*例如:123.3333取两位小数之后是123.34。
*/
public static double formatDouble3(double d){
NumberFormat nf = NumberFormat.getNumberInstance();
//保留两位小数
nf.setMaximumFractionDigits(2);
//如果不需要四舍五入可以使用RoundingMode.DOWN
nf.setRoundingMode(RoundingMode.UP);
return nf.format(d);
}
4、通过DecimalFormat
/**
* DecimalFormat的pattern如果写#.00,当小数点前为0时,不显示0,例如:.23。
* 如果写0.00,就会显示小数点前的0,例如:0.23
*/
public staitc double formatDouble4(double d){
DecimalFormat df = new DecimalFormat("#.00");
return Double.valueOf(df.format(d));
}
5、String.format方法
//只适合用于程序中的格式化输出
public static String formatDouble5(double d){
return String.format("%.2f",d);
}
输入:12345.6789
输出结果:
1、12345.68
2、12345.68
3、12,345.68
4、12345.68
5、12345.68
本文转自:https://www.cnblogs.com/nayitian/p/3214178.html
结合这位博主提供的方法,加了一些更细的点,有不正确的地方欢迎指正~