【问题标题】:Fastest way to get number of digits on a number? [duplicate]获取数字位数的最快方法? [复制]
【发布时间】:2013-03-13 08:11:20
【问题描述】:

我确实检测到了数字上的位数。例如,3295866 数字。

我所做的只是将数字解析为字符串,并获取字符串长度,例如:

number.toString().length()

但是,有没有最快的方法来计算数字的位数?我必须多次使用这种方法,所以我认为使用toString() 会影响性能。

谢谢。

【问题讨论】:

  • 你是指整数吗?

标签: java string math numbers int


【解决方案1】:
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

【讨论】:

  • 这不是最快的方法,请看这个答案:stackoverflow.com/questions/1306727/…
  • 该方法需要number==0的情况单独处理。
  • 是的,这工作为零!
  • 虽然不是最快或者最通用的解决方案,但是非常优雅!
【解决方案2】:

这个自制的解决方案怎么样:

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

【讨论】:

  • 它也有效,谢谢! :D
【解决方案3】:

试试这个:

Working Example

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);
    }
}

【讨论】:

  • 也谢谢你! :D 但是,只是说,它不适用于 0 和 1...
  • 现在它适用于 0、1 和负数。
  • 对于 10,它将返回 1!
  • 对不起。更新了我的答案。
猜你喜欢
  • 2019-08-16
  • 2021-08-27
  • 2014-09-17
  • 1970-01-01
  • 2020-12-26
  • 2012-09-28
  • 2011-03-10
  • 2014-11-10
  • 2015-05-20
相关资源
最近更新 更多