2

对,对不起,我想不出正确的词来谷歌这个。所以我得问问。

我有一个long( System.currentTimeMillis())

让我们说

3453646345345345

我想删除最后六个(或其他数量的)数字,我想我可以通过某种位移来做到这一点?

所以我最终会得到

3453646345

编辑

我想得到System.currentTimeMillis()一个时间框,所以如果我问时间然后再问 29 秒后它会返回相同的数字,但如果我问 31 秒后它会返回一个不同的数字。30 秒时间框可配置。

4

3 回答 3

6

您只需将其除以 1Mlong 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 回答