odo*_*ugs 15 java integer scientific-notation exponent long-integer
我2e15一眼就可以轻易地读作"两千万亿",但是因为2000000000000000我必须计算零,这需要更长的时间并且可能导致错误.
为什么我不能声明int或long使用诸如2e9或之类的文字1.3e6?我理解10的负幂,例如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
ass*_*ias 19
这是因为当您使用科学记数法时,您会创建一个浮点数(在您的示例中为double).并且您不能将浮点分配给整数(这将是一个缩小的原始转换,这不是有效的赋值转换).
所以这不会起作用,例如:
int y = 2d; //can't convert double to int
Run Code Online (Sandbox Code Playgroud)
你有几个选择:
int y = (int) 2e6;int y = 2_000_000;