Java: Why can#39;t I declare integer types using scientific notation?(Java:为什么我不能用科学记数法声明整数类型?)
问题描述
我可以很容易地一目了然地将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
推荐答案
因为当您使用科学记数法时,您将创建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;
这篇关于Java:为什么我不能用科学记数法声明整数类型?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Java:为什么我不能用科学记数法声明整数类型?
基础教程推荐
- 无法使用修饰符“public final"访问 java.util.Ha 2022-01-01
- “未找到匹配项"使用 matcher 的 group 方法时 2022-01-01
- 降序排序:Java Map 2022-01-01
- 如何使用 Java 创建 X509 证书? 2022-01-01
- FirebaseListAdapter 不推送聊天应用程序的单个项目 - Firebase-Ui 3.1 2022-01-01
- 在 Libgdx 中处理屏幕的正确方法 2022-01-01
- Java:带有char数组的println给出乱码 2022-01-01
- 减少 JVM 暂停时间 >1 秒使用 UseConcMarkSweepGC 2022-01-01
- 设置 bean 时出现 Nullpointerexception 2022-01-01
- Java Keytool 导入证书后出错,"keytool error: java.io.FileNotFoundException &拒绝访问" 2022-01-01