-2

以下は、10 進数値をデバイスからタイムスタンプ/タイムスパン データに変換しようとしているコードですが、正しい答えが得られません。つまり、取得する必要があります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;

そうすれば、1 秒のロスも解決するはずです。

于 2013-09-27T07:49:53.923 に答える