Java:为什么我不能用科学记数法声明整数类型?
it1352
帮助8人
问题说明
我可以很容易地一目了然地将2e15
读成"两千万亿",但对于2000000000000000
,我必须计算零,这需要更长的时间,可能会导致错误。
为什么不能使用文字声明int
或long
,如2e9
或1.3e6
?我知道10的负幂(如2e-3
)或小于小数位数的10的幂(如1.0003e3
)会产生浮点数,但为什么Java不允许这样的声明,而只是截断浮点部分,并在结果值不是整数的情况下发出温和警告?
这是一个糟糕的主意,有没有技术原因,或者这完全是类型安全的问题?对于编译器来说,简单地解析像
这样的语句不是很简单吗
long x = 2e12
ASlong x = 2000000000000 //OK for long
和int y = 2.1234e3
ASint y = 2123.4 //warning: loss of precision
正确答案
#1
因为当您使用科学记数法时,您将创建a floating point number(在您的示例中为双精度)。并且不能将浮点赋给整数(这将是缩小基元转换,which is not a valid assignment conversion)。
因此这也不起作用,例如:
int y = 2d; //can't convert double to int
您有几个选项:
- 将浮点显式转换为整数:
int y = (int) 2e6;
- 在Java 7 中使用千分隔符:
int y = 2_000_000;
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /reply/detail/tancbg
系列文章
更多
同类精品
更多
-
YouTube API 不能在 iOS (iPhone/iPad) 工作,但在桌面浏览器工作正常?
it1352 07-30 -
iPhone,一张图像叠加到另一张图像上以创建要保存的新图像?(水印)
it1352 07-17 -
保持在后台运行的 iPhone 应用程序完全可操作
it1352 07-25 -
使用 iPhone 进行移动设备管理
it1352 07-23 -
在android同时打开手电筒和前置摄像头
it1352 09-28 -
检查邮件是否发送成功
it1352 07-25 -
扫描 NFC 标签时是否可以启动应用程序?
it1352 08-02 -
Android微调工具-删除当前选择
it1352 06-20 -
Android App 和三星 Galaxy S4 不兼容
it1352 07-20 -
希伯来语的空格句子标记化错误
it1352 06-22