gpt4 book ai didi

Java简单数学异常

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:52:45 26 4
gpt4 key购买 nike

考虑简单的代码

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;
}
}

现在,如果我运行该程序,它会打印 True。但是,如果我用 3456000000.0 替换 24*40*60*60*1000,它会返回 False。请注意,我在末尾附加了一个 .0,以便 Java 将其视为 double 而不是 int。 int 不能接受那么大的数字,但 double 可以。

这是为什么呢?我怀疑这与内部表示数字的方式有关。

最佳答案

您遇到了 24*40*60*60*1000 的整数溢出。当您使用 3456000000.0 时,没有溢出,因为正如您所说,它是 double 的。因此结果不同。

我们可以使用 double 来避免溢出:

24.0 * 40.0 * 60.0 * 60.0 * 1000.0

或做多:

24L * 40L * 60L * 60L * 1000L

关于Java简单数学异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16049843/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com