Noo*_*954 5 java math android negative-number long-integer
我试图通过乘以毫秒来计算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){
Run Code Online (Sandbox Code Playgroud)
days_30值的结果为:-1702967296
PS
double days_30 = 1000 * 60 * 60 * 24 * 30;
double oldTime = pref.getLong("smstimestamp", 0);
double newTime = System.currentTimeMillis();
if(newTime - oldTime >= days_30){
Run Code Online (Sandbox Code Playgroud)
结果较小 - 但仍为负数.-1.702967296E9
rge*_*man 21
您正在相乘ints,并且因为最大整数是2^31 - 1溢出而发生溢出.只有在乘法之后它才会转换为a long.将第一个数字转换为long.
long days_30 = (long) 1000 * 60 * 60 * 24 * 30;
Run Code Online (Sandbox Code Playgroud)
或使用long文字:
long days_30 = 1000L * 60 * 60 * 24 * 30;
Run Code Online (Sandbox Code Playgroud)
这long将从一开始就强制数学运算.