-2

下面是我试图将十进制值从我的设备转换为时间戳/时间跨度数据的代码,但我没有得到正确的答案,即我需要得到12:59:59但我将它作为13:00:00.

double dec = 913707042;
int sec = (int)Math.round(dec * 3600);
int deg = sec / 3600;
sec = Math.abs(sec % 3600);
int min = sec / 60;
sec %= 60;

我不明白这段代码有什么问题,请帮助我。

提前致谢。

4

1 回答 1

1

眼前的问题在这里:

double dec = 913707042;
int sec = (int)Math.round(dec * 3600);

dec * 3600给您一个太大而无法放入整数(最多 2^31 - 1)的数字,因此您将返回值转换为(int)将失去一些精度。

但是,真正的问题是您的代码相当奇怪:

int sec = (int)Math.round(dec * 3600);
int deg = sec / 3600;
sec = Math.abs(sec % 3600);

为什么不直接说:

int deg = (int) dec;
int sec = deg % 3600;

如果你这样做,你也应该解决你的一秒损失。

于 2013-09-27T07:49:53.923 回答