RoundingMode HALF_UP无法正常工作

时间:2016-05-31 03:48:18

标签: java rounding decimalformat

据我了解,RoundingMode.HALF_UP使用我们传统的舍入方式。但是,它没有给我预期的结果:

我正在使用具有不同参数的DecimalFormat()(#,#。#,...等)并输入双3.5545

// taken from Util    
public static void setRound(int a)      // Set rounding decimal places
{
    roundTo = a;

    String t = "#";
    if (roundTo > 0)
    {
        t += ".";
        for (int u = 1; u <= roundTo; u++)
            t += "#";
    }

    df = new DecimalFormat(t);
    df.setRoundingMode(RoundingMode.HALF_UP);
}

public static String round(double d)    // Rounds up answers to set place
{
    return df.format(d);
}

// taken from Testing class
 for (int a = 0; a < 5; a++)
    {
    Util.setRound(a);
    System.out.println(Util.round(3.5545));
    }

// results
0 -> 4              
1 -> 3.6   
2 -> 3.55   
3 -> 3.554 *(I want 3.555)*  
4 -> 3.5545

我怎样才能解决这个问题(任何数字落后5轮)? 任何帮助将不胜感激。

谢谢。

3 个答案:

答案 0 :(得分:3)

你可以使用BigDecimal scale方法;

for (int i = 0; i < 5; i++) {
            BigDecimal bg = new BigDecimal("3.5545").setScale(i, RoundingMode.HALF_UP);
            System.out.println(bg);
        }

输出;

0 --> 4
1 --> 3.6
2 --> 3.55
3 --> 3.555
4 --> 3.5545

答案 1 :(得分:0)

与此相关的new Date function可能会或可能不会在您的java版本中修复。

答案 2 :(得分:-1)

这可能是因为双精度的原因。试试这种方式它会起作用:

// taken from Testing class
for (int a = 0; a < 5; a++)
{
    Util.setRound(a);
    System.out.println(Util.round(new BigDecimal("3.5545")); // you also need to change your round() method to accept a BigDecimal input.
}