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