Я могу легко прочитать 2e15 как "два квадриллиона" с первого взгляда, но для 2000000000000000 мне приходится считать нули, что занимает больше времени и может привести к ошибкам.
Почему я не могу объявить int или long с использованием литерала, такого как 2e9 или 1.3e6? Я понимаю, что отрицательная мощность 10, например 2e-3, или мощность 10, которая меньше числа десятичных знаков, например 1.0003e3, приведет к числу чисел с плавающей запятой, но почему Java не позволяет такие объявления и просто обрезать часть с плавающей запятой и выдавать мягкое предупреждение в случаях, когда результирующее значение не является неотъемлемым?
Есть ли техническая причина, почему это плохая идея, или это все о безопасности типов? Разве это не было бы тривиальным для компилятора просто проанализировать выражение вроде
long x = 2e12 как long x = 2000000000000 //OK for long
и int y = 2.1234e3 как int y = 2123.4 //warning: loss of precision