格式化双精度到2位小数不起作用

时间:2011-03-13 16:21:50

标签: java double rounding

我想绕过这双:

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

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

4 个答案:

答案 0 :(得分:14)

你的第一个解决方案非常非常接近。就这样做:

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

您的版本不起作用的原因是您正在使用input双倍,将其格式化为String并使用2dp,然后将其转换回doubleSystem.out.println然后按照惯例打印double,没有特殊的小数位规则。

答案 1 :(得分:4)

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

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

打印

3.50

答案 2 :(得分:1)

您是否尝试用0替换#

DecimalFormat df = new DecimalFormat(“#。##”);     的System.out.println(df.format(输入));

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

答案 3 :(得分:0)

您可以使用Apache Commons-math的Precision类

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