获取一个数字的位数的最快方法是什么?

14

我需要检测一个数字中的数字数量。例如,3295866 位数字。

我的做法是将该数字转换成字符串,然后获取字符串长度,例如:

number.toString().length()

然而,有没有更快的方法来计算一个数字中的位数?我需要多次使用这个方法,所以我认为使用 toString() 可能会影响性能。

谢谢。


1
你说的“number”是指整数? - Denys Séguret
3个回答

45
Math.floor(Math.log10(number) + 1)
// or just (int) Math.log10(number) + 1
例如:
int number = 123456;
int length = (int) Math.log10(number) + 1;
System.out.println(length);

输出:

6

3
这不是最快的方法,可以看一下这个答案:https://dev59.com/-nM_5IYBdhLWcg3wmkau#1308407 - gaborsch
1
这个方法需要单独处理number==0的情况。 - Patricia Shanahan
2
是的,这对于零不起作用! - mike
虽然不是最快或最通用的解决方案,但非常优雅! - Pavel Razgovorov

12

这个自制方案怎么样:

int noOfDigit = 1;
while((n=n/10) != 0) ++noOfDigit;

0
试试这个:

工作示例

public class Main {
    public static void main(String[] args) {
        long num = -23;
        int digits = 0;
        if (num < 0) 
            num *= (-1);
        if (num < 10 && num >= 0)
            digits = 1;
        else {
            while(num > 0) {
                num /= 10;
                digits++;
            }
        }
        System.out.println("Digits: " +digits);
    }
}

2
谢谢你!:D 但是,只是说一下,它不适用于0和1... - João Vitor Verona Biazibetti
现在它将适用于0、1以及负数。 - Zelldon
2
对于10,它将返回1! - Saeed
抱歉。我更新了我的答案。 - Zelldon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接