Java:将十进制值舍入为HALF_EVEN

时间:2015-05-26 13:07:21

标签: java math decimal rounding bigdecimal

我一直在尝试编写一个Java代码来将值舍入到下面的要求。

如果x = 63.88 => roundedValue = 64.00;

如果x = 63.50 => roundedValue = 64.00

如果x = 63.32 => roundedValue = 63.32

我试过了不同的roundingModes,如CEILING,DOWN,FLOOR,HALFDOWN。 我也试过Math.round();

但是我无法获得预期的输出。 我的输入是一个字符串,输出是一个字符串。

请找到我在下面尝试过的代码段

BigDecimal value1 = new BigDecimal(input);
value1=value1.setScale(2, RoundingMode.HALF_EVEN);
//float rounded=Math.round(amount);

String finalValue=String.valueOf(value1);

我无法获得所需的输出。请告诉我如何实现这一目标?

ps:我应该考虑使用float还是BigDecimal?

4 个答案:

答案 0 :(得分:3)

if(x%1 >= .5)
  { x = Math.round(x) }
else //do nothing

这似乎可以为您提供所需的输出。因此,如果你真的想要,你可以覆盖或创建自己的方法来调用舍入

答案 1 :(得分:0)

您想要做的是提供您自己的MathContext来指定您想要执行的舍入行为。

您最接近当前要求的是:使用RoundingMode.HALF_UPRoundingMode.UNNECESSARY

为此你必须使用BigDecimal,因为Double和Float不会暴露四舍五入。

答案 2 :(得分:0)

正如在您的帖子中一样,如果您想使用十进制舍入,则可以使用BigDecimal

如果您想要对数字> = X.5进行舍入,并避免舍入数字< X.5然后你可以使用这段代码:

import java.math.BigDecimal;
import java.math.RoundingMode;

public class Round {

    public static void main(String[] args) {
        System.out.println(round("63.88"));
        System.out.println(round("63.50"));
        System.out.println(round("63.32"));
    }

    private static BigDecimal round(String input) {
        BigDecimal value = new BigDecimal(input);

        BigDecimal rounded = value.setScale(0, RoundingMode.HALF_UP);
        if (rounded.compareTo(value) > 0)
            return rounded.setScale(2);

        return value;
    }

}

输出结果为:

64.00
64.00
63.32

答案 3 :(得分:0)

public static void main(String args[]) {

    Double d = 63.18;
    DecimalFormat df = new DecimalFormat("00.00");

    if(d % 1 >= 0.5) 
        System.out.println(df.format(Math.round(d)));
    else 
        System.out.println(d);
}