2010-06-03 21 views
10

Acabo de aprender Java y estoy intentando que mi programa recupere el primer dígito de un número, por ejemplo 543 debería devolver 5, etc. Pensé convertirlo en una cadena, pero no estoy seguro de cómo puedo convertirlo de nuevo? Gracias por cualquier ayuda.Recuperando el primer dígito de un número

int number = 534; 
String numberString = Integer.toString(number); 
char firstLetterChar = numberString.charAt(0); 
int firstDigit = ???? 
+0

¿Qué desea hacer para los números negativos? – DJClayworth

+0

en mi caso el número nunca debería ser negativo, así que realmente no me importa – Michoel

+0

Multiplique el número por -1 si es negativo, y luego proceda con normalidad. –

Respuesta

19
int number = 534; 
    int firstDigit = Integer.parseInt(Integer.toString(number).substring(0, 1)); 
+3

esto es sinceramente ** así que ** mucho más simple/utilizable que todas las respuestas esotéricas/excesivamente complejas y algorítmicas en otros lugares como http://stackoverflow.com/questions/2051817/return -primer dígito de un entero: tal vez esto no se escale en una aplicación científica de mainframe con números de 20 dígitos ... pero ¿quién los escribe de todos modos? – mmcrae

0

Integer.parseInt tendrá una cadena y devolver un int.

+1

¡gracias por la sugerencia! – Michoel

0
int firstDigit = Integer.parseInt(Character.toString(firstLetterChar)); 
1
int number = 534; 
String numberString = "" + number; 
char firstLetterchar = numberString.charAt(0); 
int firstDigit = Integer.parseInt("" + firstLetterChar); 
+1

¿Hay alguna razón por la que prefiera hacer numberString = "" + number en lugar de numberString = Integer.toString (number)? – Michoel

+0

Él es perezoso para escribir todo :) –

+0

@Dimitris True. :) Pero "" + int = String es un modismo de Java – Adam

16
firstDigit = number/((int)(pow(10,(int)log(number)))); 

Esto debería obtener su primer dígito usando matemáticas en lugar de cadenas.

en su registro de ejemplo (543) = 2,73 que fundido a un int es 2. pow (10, 2) = 100 543/100 = 5,43 pero ya que es un int que se trunca a 5

+0

sería interesante ver cómo los puntos de referencia frente a las operaciones de cadena – Arkadiy

+2

parecen divertidos, pero ¿hay alguna ventaja de hacerlo de esta manera? si estuviera leyendo esa línea y no soy profesor de matemáticas, no tendría idea de lo que hace :-) – Michoel

+0

Bueno, el registro de 100 es 2 y el registro de 999 es 2.99 para que pueda ver que el registro está devolviendo el número de dígitos menos uno si se almacena como un int. El número de dígitos te dice por qué dividir el número. Luego usamos el poder incorporado de int para truncar todo después del decimal, dejándonos con el primer dígito. Sin embargo, no puedo decirles qué camino es más rápido. Solo quería ofrecer una solución alternativa que no requiera convertir el número en una cadena. –

27

casi con toda seguridad más eficiente que el uso de cuerdas:

int firstDigit(int x) { 
    while (x > 9) { 
     x /= 10; 
    } 
    return x; 
} 

(. Sólo funciona para los números enteros no negativos)

0

Este ejemplo funciona para cualquier, no sólo los números enteros dobles positivos y tiene en cuenta los números negativos o los que menos de uno. Por ejemplo, 0.000053 volvería 5.

private static int getMostSignificantDigit(double value) { 
    value = Math.abs(value); 
    if (value == 0) return 0; 
    while (value < 1) value *= 10; 
    char firstChar = String.valueOf(value).charAt(0); 
    return Integer.parseInt(firstChar + ""); 
} 

Para obtener el primer dígito, esto se pega con la manipulación de cadenas, ya que es mucho más fácil de leer.

2
int number = 534; 
int firstDigit = number/100; 

(/) del operador en Java dividir los números sin tener en cuenta el recordatorio de modo que cuando dividimos 534 por 100, nos da (5).

pero si usted desea conseguir el último número, puede utilizar (%) del operador

int lastDigit = number%10; 

que nos da el recordatorio de la división, por lo que 534% 10, rendirá el número 4.

+0

@Maysera, agregar una respuesta de solo código generalmente se considera una publicación de mala calidad. Le dice a otro qué pero no por qué este fragmento resuelve el problema. Por favor, actualice su respuesta. –

+0

@MaherAbuthraa Acabo de hacer – Maysara

0

De esta manera el poder da más sentido si no desea utilizar métodos str

int first = 1; 
for (int i = 10; i < number; i *= 10) { 
    first = number/i; 
} 
Cuestiones relacionadas