在java中舍入.5

时间:2014-12-12 19:29:33

标签: java rounding

如何实现一个舍入函数,它会像往常一样舍入所有数字,除了0.5或其任何奇数倍,直到最接近的整数?

例如:

  • 2.899将向上舍入为3.0
  • 2.332将向下舍入为2.0
  • 2.5也需要向下舍入为2.0(而不是3.0

3 个答案:

答案 0 :(得分:8)

您可以按如下方式使用BigDecimal

public static double roundHalfDown(double d) {
    return new BigDecimal(d).setScale(0, RoundingMode.HALF_DOWN)
                            .doubleValue();
}

示例:

for (double d : new double[] { 2.889, 2.332, 2.5 })
    System.out.printf("%.2f  ->  %.2f%n", d, roundHalfDown(d));

<强>输出:

2.89  ->  3.00
2.33  ->  2.00
2.50  ->  2.00

答案 1 :(得分:4)

您可以在Math.floor()的帮助下相当容易地确定小数部分,然后根据小数部分从那里进行舍入:

public static double roundHalfDown(double d) {
    double i = Math.floor(d); // integer portion
    double f = d - i; // fractional portion
    // round integer portion based on fractional portion
    return f <= 0.5 ? i : i + 1D;
}

答案 2 :(得分:2)

你必须在这里使用BigDecimal和MathContext:

http://docs.oracle.com/javase/6/docs/api/java/math/BigDecimal.html http://docs.oracle.com/javase/6/docs/api/java/math/MathContext.html http://docs.oracle.com/javase/6/docs/api/java/math/BigDecimal.html#ROUND_HALF_DOWN

不同舍入模式下的舍入操作摘要

使用这些类,圆形工作如下:

Input HALF_DOWN
5.5     5   
2.5     2   
1.6     2   
1.1     1   
1.0     1   
-1.0    -1  
-1.1    -1  
-1.6    -2  
-2.5    -2  
-5.5    -5