System.out.println("xcqw 5.4 *"+Math.round(5.4)); System.out.println("xcqw 5.5 *"+Math.round(5.5)); System.out.println("xcqw 5.6 *"+Math.round(5.6)); System.out.println("xcqw -5.4*"+Math.round(-5.4)); System.out.println("xcqw -5.5*"+Math.round(-5.5)); System.out.println("xcqw -5.6*"+Math.round(-5.6));
运算结果
08-11 16:42:37.682 28969-28969/com.dx.text0811 I/System.out: xcqw 5.4 *5
08-11 16:42:37.682 28969-28969/com.dx.text0811 I/System.out: xcqw 5.5 *6
08-11 16:42:37.682 28969-28969/com.dx.text0811 I/System.out: xcqw 5.6 *6
08-11 16:42:37.682 28969-28969/com.dx.text0811 I/System.out: xcqw -5.4*-5
08-11 16:42:37.682 28969-28969/com.dx.text0811 I/System.out: xcqw -5.5*-5
08-11 16:42:37.682 28969-28969/com.dx.text0811 I/System.out: xcqw -5.6*-6
问题就出在
System.out.println("xcqw -5.5*"+Math.round(-5.5)); System.out.println("xcqw -5.6*"+Math.round(-5.6));看看函数的注释就知道为什么了
/** * Returns the result of rounding the argument to an integer. The result is * equivalent to {@code (long) Math.floor(d+0.5)}. * <p> * Special cases: * <ul> * <li>{@code round(+0.0) = +0.0}</li> * <li>{@code round(-0.0) = +0.0}</li> * <li>{@code round((anything > Long.MAX_VALUE) = Long.MAX_VALUE}</li> * <li>{@code round((anything < Long.MIN_VALUE) = Long.MIN_VALUE}</li> * <li>{@code round(+infinity) = Long.MAX_VALUE}</li> * <li>{@code round(-infinity) = Long.MIN_VALUE}</li> * <li>{@code round(NaN) = +0.0}</li> * </ul> * * @param d * the value to be rounded. * @return the closest integer to the argument. */ public static long round(double d) { // check for NaN if (d != d) { return 0L; } return (long) floor(d + 0.5d); }