为什么用科学记数法写一个数字会在这个代码中有所作为?
我正在尝试编写一个代码来确定自1970年初以来的毫秒数何时会超过一个长的能力。以下代码似乎可以完成这项工作:
public class Y2K {
public static void main(String[] args) {
int year = 1970;
long cumSeconds = 0;
while (cumSeconds < Long.MAX_VALUE) {
// 31557600000 is the number of milliseconds in a year
cumSeconds += 3.15576E+10;
year++;
}
System.out.println(year);
}
}
此代码在几秒钟内执行并打印292272992。如果我没有使用科学记数法,而是将cumSeconds写成,则该程序似乎需要“永远”才能运行(我只是在10分钟左右后暂停)。另请注意,用科学记数法编写 cumSeconds 不需要指定数字是 a,末尾有 L 或 l。31558000000L
long