hi, its not clear to me , how you are calculating this output ?
float f7 = -2147483655f;
see , the last two digit of f7 ..its 55..ok.The output i have got having last two digit 48....clearly these are not nearest integer. so, i think your explanation is not correct.
My explanation is correct, perhaps not complete.
Here are the relevant parts from the API (from the Math class)
static long round(double a)
Returns the closest long to the argument.
static int round(float a)
Returns the closest int to the argument.
The difference is the method that accepts a double returns a long, so, the
number ending in 55 fits into a long, whereas it doesn't fit into an int
when the same number is 'typed' as a float.