2

そうですね、申し訳ありませんが、これをググる正しい言葉が思いつきません。だから私は尋ねなければならないでしょう。

long( System.currentTimeMillis())を持っています

まあ言ってみれば

3453646345345345

最後の 6 桁 (またはその他の桁数) を削除したいのですが、何らかのビット シフトを行うことでこれを実行できると思いますか?

だから私はで終わるだろう

3453646345

編集

タイムボックス内で取得したかったSystem.currentTimeMillis()ので、時間を尋ねてから29秒後にもう一度尋ねると同じ番号が返されますが、31秒後に尋ねると別の番号が返されます。30 秒のタイムボックスが設定可能です。

4

3 に答える 3

6

単純に1Mで割る必要がありますlong shorter = System.currentTimeMillis() / 1000000L;

于 2012-08-22T07:33:00.840 に答える
3

@Yob の回答に基づいて構築するには、次のようなメソッドを作成して、削除する桁数を構成可能にすることができます。

public long removeDigits(long number, int digitsToRemove) {
    return number / (long)Math.pow(10, digitsToRemove);
}
于 2012-08-22T07:53:36.417 に答える
1

あなたがしたいことに応じて(ベース10で、私は仮定します)、これを行うことができます:

int64_t radix = 1000000; // or some other power of 10

x -= x%radix; // last 6 decimal digits are now 0
              // e.g: from 3453646345345345 to 3453646345000000

またはこれ(前の回答のように):

x /= radix; // last 6 decimal digits are gone, the result rounded down
            // e.g: from 3453646345345345 to 3453646345

編集への応答

radix目的に応じて、モジュラスの例を 30000 に変更できます。

int64_t timeInterval = 30000;
displayTime = actualTime - (actualTime % timeInterval);

displayTimeactualTimeはミリ秒単位です。displayTimeこの場合、単位はミリ秒のままですが、(切り捨てられた) 粒度は 30 秒になります。

粒度を切り上げるには、次の操作を実行できます。

int64_t timeInterval = 30000;
int64_t modulus = actualTime % timeInterval;
displayTime = actualTime - modulus + (modulus?timeInterval:0);

ただし、あなたが求めていることに基づいて、表示値を数ティックごとに更新したいだけのようです。以下も同様に機能します。

if((actualTime - displayTime) >= timeInterval){
    displayTime = actualTime - (actualTime % timeInterval);
}

C の整数型を許してください。使用している整数の幅について明確にすることを好みます:P.

于 2012-08-22T07:39:55.313 に答える