【问题标题】:Formatting double to 2 decimals doesn't work将双精度格式化为 2 位小数不起作用
【发布时间】:2011-03-13 16:21:50
【问题描述】:

我想把这个双数取整:

3.499999999999999

到:

3.50

而且我已经用过这两种方法了:

DecimalFormat df = new DecimalFormat("0.00");
        double result = Double.valueOf(df.format(input));
        System.out.println(answer);

public double round(double input)
    {
        int decimalPlace = 2;
        BigDecimal bd = new BigDecimal(input);
        bd = bd.setScale(decimalPlace,BigDecimal.ROUND_UP);

        return (bd.doubleValue());
    }

但它一直在打印:

3.5

有人对此有解决方案吗?因为我真的认为这应该有效。感谢您的帮助。

【问题讨论】:

标签: java double rounding


【解决方案1】:

您的第一个解决方案非常非常接近。只需这样做:

    DecimalFormat df = new DecimalFormat("0.00");
    System.out.println(df.format(input));

您的版本不起作用的原因是您正在使用 input 双精度,将其格式化为具有 2dp 的 String,然后将其转换回 double。然后System.out.println 像往常一样打印double,没有特殊的小数位规则。

【讨论】:

    【解决方案2】:

    您可以使用可能更简单的 printf 格式。

    System.out.printf("%.2f%n", 3.5);
    

    打印

    3.50
    

    【讨论】:

      【解决方案3】:

      您是否尝试用# 替换0

      DecimalFormat df = new DecimalFormat("#.##"); System.out.println(df.format(input));

      根据here#如果数字不存在将被解析为0

      【讨论】:

      • 对不起,对于提问者的要求,这完全是错误的。 “#.##”将打印“3.5”,“0.00”将打印“3.50”。 (刚刚测试它是肯定的。)
      【解决方案4】:

      您可以使用 apache commons-math 的 Precision 类

      double result = Precision.round(3.499999999999999, 2);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-03
        • 1970-01-01
        • 2013-08-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多