Way to get number of digits in an int?

后端 未结 30 935
梦毁少年i
梦毁少年i 2020-11-22 17:21

Is there a neater way for getting the number of digits in an int than this method?

int numDigits = String.valueOf(1000).length();
相关标签:
30条回答
  • 2020-11-22 17:36

    A really simple solution:

    public int numLength(int n) {
      for (int length = 1; n % Math.pow(10, length) != n; length++) {}
      return length;
    }
    
    0 讨论(0)
  • 2020-11-22 17:39

    Enter the number and create an Arraylist, and the while loop will record all the digits into the Arraylist. Then we can take out the size of array, which will be the length of the integer value you entered.

    ArrayList<Integer> a=new ArrayList<>();
    
    while(number > 0) 
    { 
        remainder = num % 10; 
        a.add(remainder);
        number = number / 10; 
    } 
    
    int m=a.size();
    
    0 讨论(0)
  • 2020-11-22 17:41

    How about plain old Mathematics? Divide by 10 until you reach 0.

    public static int getSize(long number) {
            int count = 0;
            while (number > 0) {
                count += 1;
                number = (number / 10);
            }
            return count;
        }
    
    0 讨论(0)
  • 2020-11-22 17:44

    You could could the digits using successive division by ten:

    int a=0;
    
    if (no < 0) {
        no = -no;
    } else if (no == 0) {
        no = 1;
    }
    
    while (no > 0) {
        no = no / 10;
        a++;
    }
    
    System.out.println("Number of digits in given number is: "+a);
    
    0 讨论(0)
  • Your String-based solution is perfectly OK, there is nothing "un-neat" about it. You have to realize that mathematically, numbers don't have a length, nor do they have digits. Length and digits are both properties of a physical representation of a number in a specific base, i.e. a String.

    A logarithm-based solution does (some of) the same things the String-based one does internally, and probably does so (insignificantly) faster because it only produces the length and ignores the digits. But I wouldn't actually consider it clearer in intent - and that's the most important factor.

    0 讨论(0)
  • 2020-11-22 17:45

    Since the number of digits in base 10 of an integer is just 1 + truncate(log10(number)), you can do:

    public class Test {
    
        public static void main(String[] args) {
    
            final int number = 1234;
            final int digits = 1 + (int)Math.floor(Math.log10(number));
    
            System.out.println(digits);
        }
    }
    

    Edited because my last edit fixed the code example, but not the description.

    0 讨论(0)
提交回复
热议问题