我试图基于以毫秒为单位的离任日期和目的地中的天数来计算以毫秒为单位的返回日期。我选择通过在传出日期中添加daysIn * 86400000来实现,其中86400000代表以毫秒为单位的一天。
long newReturn = newOut + (daysIn * 86400000);
此表达式的第二部分似乎无效。如果我将daysIn设置为30,则daysIn * 86400000显然是-1702967296。我期望2592000000,所以这显然导致我的newReturn值是错误的。
如果值很小,例如2,它工作正常,所以我不明白这个问题。
这些是变量的类型:
long newReturn;
long newOut;
int daysIn;
我认为类型可能会有问题,但是long可以处理大量数字,并且如果daysIn为24或更小,那么一切都可以。 关于会导致该错误或如何解决该错误的任何想法?一切都会感激的。
答案 0 :(得分:0)
标记为重复的问题与“如何检查我的操作是否会导致溢出”有关,这对解决上述溢出没有帮助。我这样重新提出了这个问题。
daysIn
是int
,86400000
是int
,所以daysIn * 86400000
是一个int(类型),并且溢出。
解决方案是将daysIn
设为long
,或者将86400000
指定为long
:即86400000L
。
long newReturn = newOut + (daysIn * 86400000L); // should work as intended