如何实现一个舍入函数,它会像往常一样舍入所有数字,除了0.5或其任何奇数倍,直到最接近的整数?
例如:
2.899
将向上舍入为3.0
2.332
将向下舍入为2.0
2.5
也需要向下舍入为2.0
(而不是3.0
)答案 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