Math.rint()
and Math.round()
have several differences, but the one which might impact the business logic of a Java application the most is the way they handle rounding of integers which are on a boundary (e.g. 4.5
is on the boundary of 4
and 5
). Consider the following code snippet and output:
double val1 = 4.2;
double val2 = 4.5;
System.out.println("Math.rint(" + val1 + ") = " + Math.rint(val1));
System.out.println("Math.round(" + val1 + ") = " + Math.round(val1));
System.out.println("Math.rint(" + val2 + ") = " + Math.rint(val2));
System.out.println("Math.round(" + val2 + ") = " + Math.round(val2));
System.out.println("Math.rint(" + (val2 + 0.001d) + ") = " + Math.rint(val2 + 0.001d));
System.out.println("Math.round(" + (val2 + 0.001d) + ") = " + Math.round(val2 + 0.001d));
Output:
Math.rint(4.2) = 4.0
Math.round(4.2) = 4
Math.rint(4.5) = 4.0
Math.round(4.5) = 5
Math.rint(4.501) = 5.0
Math.round(4.501) = 5
As you can see, Math.rint(4.5)
actually rounds down, while Math.round(4.5)
rounds up, and this deserves to be pointed out. However, in all other cases, they both exhibit the same rounding rules which we would expect.
Here is a useful Code Ranch article which briefly compares Math.rint()
and Math.round()
: http://www.coderanch.com/t/239803/java-programmer-OCPJP/certification/Difference-rint-methods-Math-class
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…