您如何实现一个舍入函数,它将像往常一样对所有数字进行四舍五入,除了0.5或它的任何奇数下降到最接近的整数?
例如:
2.899将被舍入到3.02.332将四舍五入到2.02.5也被舍入到2.0 (而不是3.0)发布于 2014-12-12 19:34:53
您可以按以下方式使用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发布于 2014-12-12 19:55:59
在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;
}发布于 2014-12-12 19:32:10
您必须使用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 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 https://stackoverflow.com/questions/27450766
复制相似问题