我试图通过乘以毫秒来计算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
发布于 2013-06-20 18:39:18
您正在将ints
相乘,并且因为the maximum integer is 2^31 - 1
而发生溢出。只有在乘法之后,它才会转换为long
。将第一个数字转换为long
。
long days_30 = (long) 1000 * 60 * 60 * 24 * 30;
或者使用long
文本:
long days_30 = 1000L * 60 * 60 * 24 * 30;
这将从一开始就强制执行long
数学运算。
发布于 2013-06-20 18:39:09
long days_30 = 1L * 1000 * 60 * 60 * 24 * 30;
发布于 2013-06-20 18:40:58
只需将乘法更改为long days_30 = 1000L * 60 * 60 * 24 * 30;
即可
https://stackoverflow.com/questions/17221254
复制相似问题