double保留两位小数的不同方法

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

结合这位博主提供的方法,加了一些更细的点,有不正确的地方欢迎指正~

  • 9
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值