当前位置: 首页 > 面试题库 >

1000 * 60 * 60 * 24 * 30产生负数

万俟心思
2023-03-14
问题内容

我试图通过乘以毫秒来计算30天,但是结果持续出现,结果是days_30的值是负数,我不确定为什么。

任何建议,不胜感激!

代码片段:

// check to ensure proper time has elapsed
                SharedPreferences pref = getApplicationContext()
                        .getSharedPreferences("DataCountService", 0);
                 long days_30 = 1000 * 60 * 60 * 24 * 30;
                 long oldTime = pref.getLong("smstimestamp", 0);
                long newTime = System.currentTimeMillis();
                 if(newTime - oldTime >= days_30){

days_30值导致:-1702967296

聚苯乙烯

 double days_30 = 1000 * 60 * 60 * 24 * 30;
                 double oldTime = pref.getLong("smstimestamp", 0);
                double newTime = System.currentTimeMillis();
                 if(newTime - oldTime >= days_30){

结果较小(但仍为负数)。-1.702967296E9


问题答案:

您正在相乘ints,并且发生溢出,因为最大整数为2^31-1。只有在乘法之后,它才会转换为long。将第一个数字转换为long

long days_30 = (long) 1000 * 60 * 60 * 24 * 30;

或使用long文字:

long days_30 = 1000L * 60 * 60 * 24 * 30;

long从一开始,这将迫使数学运算。



 类似资料:
  • 问题内容: 为什么用Java将24 * 60 * 60 * 1000 * 1000除以24 * 60 * 60 * 1000不等于1000? 问题答案: 因为乘法会溢出32位整数。64位还可以: 显然,在乘法溢出之后,除法不会“撤消”该溢出。

  • 问题内容: 我想生成日期列表,但发现日期从-25 * 24 * 60 * 60 * 1000开始是错误的 我的本地日期是2016-07-17。我有 我不知道从哪里来。我按照下面的(和)将25分解为24和-1 ,然后得到正确的日期。 为什么起作用但不起作用? 这是我的代码:从i = 25起日期是错误的 问题答案: 您超出了的范围。产生一个(其然后从减去从)。 可以是24,因为结果是2,073,600

  • 问题内容: 我正在尝试计算(360/24)/ 60当我应该得到0.25时,我一直得到答案0.0 换句话说:我想将360除以24,然后将结果除以60 打印输出: 这是为什么?我是在做一些真正愚蠢的事情,还是有充分的理由呢? 问题答案: 算术中的所有操作数都不是浮点数-因此所有操作均使用整数算术完成,然后转换为浮点数。如果将适当的操作数的类型更改为浮点数,则可以正常工作: 请注意,如果仅将60更改为浮

  • 资本家总是把未来描述得相当美好。这一次,周总显然也错误地估计了形势。北京啊,毕竟是首都,大城市,他和陈董老想着把公司做大,从这里做到大城市,做到北京上海,再开分公司,再上市,上了市再开分公司…… 他这么想,于是也想当然地认为绝影会很乐意去北京,所以在跟他说这事的时候,他用了一种似乎是施舍的语气。 绝影当然不吃他这一套,过去两年中,他出差也去了不少地方,每次一回家就跟别人感叹:“还是四川好啊……”

  • 我基本上是在尝试捕捉sql命令及其对CPU的等待时间,我只想运行一个60秒的while循环,并将所有数据插入到一个临时表中。我不是很好当游标,或者如何在SQL中完成这一个。

  • 我有l5.2,我按照以下步骤钩住spikpost和laravel,并将我的服务和恢复到其原始配置: 但是我得到了这个错误: cURL错误60:SSL证书问题:无法获取本地颁发者证书(请参阅http://curl.haxx.se/libcurl/c/libcurl-errors.html)