Hi,
Widening primitive conversions do not lose information about the overall magnitude of a numeric value. Indeed, conversions widening from an integral type to another integral type and from float to double do not lose any information at all; the numeric value is preserved exactly. 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,
Why dont we loss any precision on 64-bit long variable but on 32-bit integer?
Because Long.MAX_VALUE is much bigger than Integer.MAX_VALUE and both double and float won't have any difference in the precision used to represent it. As for Interger.MAX_VALUE, converting to double will preserve more signaficant number than converting it to float and this is again due to the number of bits of each type
Hope this is clearer