【发布时间】:2015-12-03 15:28:11
【问题描述】:
非常简单的问题,但也许有人可以解释。我有两行代码:
long millisPerYear = 365*24*60*60*1000;
System.out.println("millis per year = " + millisPerYear);
我预计输出为 31 536 000 000,但我得到 1 471 228 928。
如果我从公式中删除 1000,则答案是正确的,但 1000 会将其推到边缘。
变量格式是Long,所以它的大小应该是264,足够大了。我对为什么没有准确存储这些值感到困惑。
【问题讨论】:
-
你的变量是
long,没错。但想一想:你乘以long的数字也一样吗? -
您可以通过使用
TimeUnit类来避免时间单位的这种显式乘法:long millisPerYear = TimeUnit.DAYS.toMillis(365); -
@AndyTurner 当然,在现实生活中,毫秒精度在这种规模上没有意义,因为每年的毫秒数不同。哦,“年份”至少有 3 个不同但同样有效的定义。我们通常不必担心,因为它们之间的差异只有几分钟,但如果你想要毫秒精度,它们突然变得很重要。
-
@biziclop 我确实考虑将变量命名为
millisPer365_24_hour_days_with_no_leap_seconds...