2016-10-07 2 views
0

1. long number = 564; 2. String str = number+""; 3. char[] num = str.toCharArray(); 4. number = number - num[0]; /* The value of number is 511 */valeur inattendue de la variable Longtemps après la conversion en char réseau

Je cherche à soustraire le premier chiffre du numéro à partir du numéro en utilisant ce morceau de code. Pendant le débogage, j'ai découvert que la valeur de num [0] était de 53. Quelqu'un peut-il expliquer ce qui me manque ici.

+1

'53' est le code ASCII pour le caractère' 5' –

+0

Merci, @ M.M, mais je veux que le nombre soit de 559. Est-il possible de convertir 53 à 5 en quelque sorte? – Akhilesh

+1

Vous pouvez soustraire 48? –

Répondre

1

Je vous suggère de changer votre quatrième ligne à ceci:

number = number - Long.parseLong(Character.toString(num[0])); 

Fondamentalement, ce qui se passe ici est que je d'abord convertir le char (num[0]) à une chaîne, puis analysé la chaîne à un long . Alternativement, vous n'avez même pas besoin de convertir la chaîne en un tableau de caractères! Utilisez charAt() pour obtenir le charbon:

number = number - Long.parseLong(Character.toString(str.charAt(0))); 
0

On se sent mal à convertir un nombre en une chaîne, extraire le premier char, reconvertir en nombre et soustraire. Pourquoi ne pas extraire le premier chiffre tout en travaillant directement avec les nombres? Quelque chose comme cela ferait:

long number = 564; 

    int digits = 0; 
    assert (number > 0); 
    for (long num = number; num > 1; num = num/10) { 
     digits += 1; 
    } 
    int firstDigit = (int) (number/Math.pow(10, digits -1)); 

    number = number - firstDigit; 
    System.out.println(number); 

Si vous souhaitez obtenir tous les chiffres:

long number = 564; 

    int digits = 0; 
    assert (number > 0); 
    for (long num = number; num > 1; num = num/10) { 
     digits += 1; 
    } 

    for (int digit = digits - 1; digit >= 0; digit--) { 
     int currentDigit = (int) (number/Math.pow(10, digit)) % 10; 
     System.out.println(currentDigit); 
    } 
+0

Cela fonctionne parfaitement pour le premier chiffre. Afin de trouver d'autres chiffres, une procédure similaire serait mieux ou "la chaîne" approche? – Akhilesh

+0

Je proposerais une approche similaire (nombres - pas de chaînes). La modification nécessaire est simple. Je vais mettre à jour ma réponse. – sestus

1

Lorsque vous utilisez l'opérateur binaire « - » le type de données plus petit, dans ce cas char, est promu long qui retourne la valeur ASCII de num [0] ('5') qui est 53. Pour obtenir la valeur nominale réelle de num [0], convertissez-le en String et analysez-le à Long comme Sweeper l'a indiqué.