2013-03-23 9 views
8

Ho rilevato la quantità di cifre su un numero. Ad esempio, 329586 ha cifre 6.Il modo più veloce per ottenere il numero di cifre su un numero?

quello che ho fatto, è semplicemente l'analisi il numero a stringa, e ottenere la lunghezza della stringa, come:

number.toString().length() 

Ma, c'è un modo più veloce per contare le cifre su un numero? Devo utilizzare questo metodo più volte, quindi penso che l'utilizzo di toString() possa influire sulle prestazioni.

Grazie.

+1

per numero intendi un intero? –

risposta

35
Math.floor(Math.log10(number) + 1) 
// or just (int) Math.log10(number) + 1 

Ad esempio:

int number = 123456; 
int length = (int) Math.log10(number) + 1; 
System.out.println(length); 

USCITA:

6 
+1

@downvoter Per favore, dimmi perché il -1? :) –

+3

Questo non è il modo più veloce, vedere la risposta: http://stackoverflow.com/questions/1306727/way-to-get-number-of-digits-in-an-int/1308407#1308407 – gaborsch

+1

Questo metodo ha bisogno del numero == 0 caso da trattare separatamente. –

7

come su questa soluzione homebrewed:

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

Ha funzionato anche, grazie! : D – BloodShura

0

Prova questo:

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

Grazie anche a te! : D Ma, solo dicendo, non funzionerà per 0 e 1 ... – BloodShura

+0

Ora funzionerà per 0, 1 e anche per i numeri negativi. – Zelldon

+2

per 10, restituirebbe 1! – Saeed