There is no inconsistency: the methods are simply designed to follow different specifications.
So by design round
rounds to a long
and rint
rounds to a double
. This has always been the case since JDK 1.0.
Other methods were added in JDK 1.2 (e.g. toRadians
, toDegrees
); others were added in 1.5 (e.g. log10
, ulp
, signum
, etc), and yet some more were added in 1.6 (e.g. copySign
, getExponent
, nextUp
, etc) (look for the Since: metadata in the documentation); but round
and rint
have always had each other the way they are now since the beginning.
Arguably, perhaps instead of long round
and double rint
, it'd be more "consistent" to name them double round
and long rlong
, but this is argumentative. That said, if you insist on categorically calling this an "inconsistency", then the reason may be as unsatisfying as "because it's inevitable".
Here's a quote from Effective Java 2nd Edition, Item 40: Design method signatures carefully:
When in doubt, look to the Java library APIs for guidance. While there are plenty of inconsistencies -- inevitable, given the size and scope of these libraries -- there are also fair amount of consensus.
Distantly related questions
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…