以下是我试图将十进制值从我的设备转换为时间戳/时间跨度数据的代码,但我没有得到正确的答案,即我需要获得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;
我不明白这段代码有什么问题,请帮助我。
提前致谢。
答案 0 :(得分: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;
如果你这样做,你也应该解决你的损失。