Люди упомянули диапазон с плавающей и длинной, но более простой момент заключается в том, что вы не можете представить большинство возможных чисел с плавающей запятой в целом числе.Если ваш float равен 3.14159, два ближайших значения, которые может представлять long, это 3 или 4 - оба совершенно неверны.Число с плавающей запятой может представлять миллиарды значений, которые лежат между 3 и 4. Также крайне маловероятно, что программист в первую очередь будет использовать значение с плавающей запятой, если он хочет представлять целочисленные значения - это будет очень плохой дизайнрешение.Поэтому неявное преобразование float-> int просто слишком опасно, потому что данные, которые вы почти наверняка потеряете, почти наверняка важны .Это не то, что мы намеренно делаем очень часто, и когда мы делаем это, нам обычно нравится делать это явным (Math.Floor (floatValue)).
Идти в противоположном направлении (int -> float), плаватьобычно может «адекватно» представлять целочисленное значение.Предостережение с плавающей запятой заключается в том, что числа могут храниться только в качестве приблизительного значения - чем больше значение, тем менее точно оно может быть представлено.Тем не менее, точность поплавка составляет около 6 значащих цифр - с потерями, но вы потеряете только около одной миллионной первоначальной стоимости.Во многих случаях это будет незначительным.(В тех случаях, когда значение будет значительным, программисты всегда будут очень осторожны с введением капризов с плавающей запятой в свои вычисления, поэтому на практике это редко вызывает проблемы).Следовательно, более удобно / полезно разрешить неявное преобразование в этом направлении, так как это то, что мы намеренно делаем довольно много.