gpt4 book ai didi

java - 避免 double -> 日期转换时的舍入错误

转载 作者:行者123 更新时间:2023-12-01 23:51:25 27 4
gpt4 key购买 nike

在我的程序中,我收到定义时间戳(以毫秒为单位)的字符串。现在我需要将其转换为正确的日期。我找到的解决方案看起来像这样:

String aTime = "1365504203.0269";
double t = Double.parseDouble(aTime);

Date date = new Date((long)t*1000);
SimpleDateFormat dateFormatDDMMYYYY = new SimpleDateFormat("dd.MM.yyyy");
SimpleDateFormat dateFormatHHMMssSS = new SimpleDateFormat("HH:mm:ss:SS");
String day = new String(dateFormatHHMMssSS.format(date));
String hour = new String(dateFormatDDMMYYYY.format(date));

System.out.println("The Date: "+day);
System.out.println("The Time: "+hour);

不幸的是,这消除了时间戳的毫秒精度。 (我不确定时间是否那么准确,因为我几乎无法再思考它了。)

它是否因 double->long 转换而丢失,或者根本就不存在?有什么办法可以解决这个问题吗?

最佳答案

问题出在这个声明中:

Date date = new Date((long)t*1000);

它首先将 double 转换为 long,从而截断小数位,然后乘以 1000,仅添加三个零。试试这个:

Date date = new Date((long)(t*1000.0));

它使用double作为乘法的数据类型,将小数位移到整数部分,然后进行小数位截断long转换。

使用 1000.0 而不是 1000 作为常量,强制常量也为 double 类型,从而增加了额外的确定性:乘法将发生在 double 上。

关于java - 避免 double -> 日期转换时的舍入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16255433/

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