【问题标题】:Strange Java Math Result [duplicate]奇怪的Java数学结果[重复]
【发布时间】: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...

标签: java math


【解决方案1】:

您只使用ints 在右侧进行计算。将365 替换为365L 以在long 中执行计算。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 2011-08-04
    • 1970-01-01
    • 2011-12-24
    • 2015-04-14
    • 1970-01-01
    • 2021-03-17
    相关资源
    最近更新 更多