考慮簡單的代碼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或至少內置日曆 –