考虑简单的代码Java的简单的数学异常
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Main {
public static void main(String args[]){
System.out.println(isFresh("2013-03-26 06:25:34"));
}
private static boolean isFresh(String ts){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
try {
date = sdf.parse(ts);
if((new Date().getTime() - date.getTime())>(24*40*60*60*1000)){ //Ignore events before 40 days.
return true;
}
} catch (ParseException e) {
e.printStackTrace();
}
return false;
}
}
现在,程序打印真,如果我运行它。但如果我用3456000000.0替换24 * 40 * 60 * 60 * 1000,它将返回False。请注意,我在最后附加了一个.0,以便Java将它视为double而不是int。 int不能取那么大的数字,但是可以取两倍。
这是为什么?我怀疑这有些事情需要做内部代表数字的方式。
“int不会采取大量的,但双可以“ – sashkello
您可以使用3456E6而不是 –
在侧面说明,最好使用更高级别的api来处理这种类型的ta sks:jodatime或至少内置日历 –