this is from jls 2.0 chap 5.1.2., hope it clarifies...
Conversion of an int or a long value to float, or of a long value to double, may result in loss of precision-that is, the result may lose some of the least significant bits of the value. In this case, the resulting floating-point value will be a correctly rounded version of the integer value, using IEEE 754 round-to-nearest mode (�4.2.4).
Despite the fact that loss of precision may occur, widening conversions among primitive types never result in a run-time exception (�11).
Here is an example of a widening conversion that loses precision:
class
Test {
public static void main(
String[] args) {
int big = 1234567890;
float approx = big;
System.out.println(big - (int)approx);
}
}
which prints: -46