Я могу легко прочитать 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