JavaScript: Obtenez le deuxième chiffre d'un numéro?

J'ai un numéro attribué à une variable, comme ça:

var myVar = 1234; 

Maintenant, je souhaite obtenir le deuxième chiffre (2 dans ce cas) à partir de ce numéro sans d'abord le convertir en une chaîne. Est-ce possible?

Donc, vous voulez obtenir le deuxième chiffre à partir de l'écriture décimale d'un nombre.

La solution la plus simple et la plus logique est de la convertir en une chaîne:

 var digit = (''+myVar)[1]; 

ou

 var digit = myVar.toString()[1]; 

Si vous ne voulez pas le faire de manière simple, ou si vous voulez une solution plus efficace, vous pouvez le faire:

 var l = Math.pow(10, Math.floor(Math.log(myVar)/Math.log(10))-1); var b = Math.floor(myVar/l); var digit = b-Math.floor(b/10)*10; 

Manifestation

Pour les personnes intéressées par les spectacles, j'ai fait un jsperf . Pour les nombres aléatoires utilisant le journal comme je le fais, c'est de loin la solution la plus rapide.

Débarrassez-vous des chiffres de fuite en divisant le nombre par 10 jusqu'à ce que le nombre soit inférieur à 100, en boucle. Ensuite, effectuez un modulo avec 10 pour obtenir le deuxième chiffre.

 if (x > 9) { while (x > 99) { x = (x / 10) | 0; // Use bitwise '|' operator to force integer result. } secondDigit = x % 10; } else { // Handle the cases where x has only one digit. } 

1er chiffre du nombre de droite = nombre% 10 = Math.floor ((nombre / 1)% 10)

 1234 % 10; // 4 Math.floor((1234 / 1) % 10); // 4 

2ème chiffre du numéro de droite = Math.floor ((nombre / 10)% 10)

 Math.floor((1234 / 10) % 10); // 3 

3ème chiffre du nombre de droite = Math.floor ((nombre / 100)% 10)

 Math.floor((1234 / 100) % 10); // 2 

N ° chiffre du nombre de droite = Math.floor ((nombre / 10 ^ n-1)% 10)

 function getDigit(number, n) { return Math.floor((number / Math.pow(10, n - 1)) % 10); } 

Nombre de chiffres dans un nombre = Math.max (Math.floor (Math.log10 (Math.abs (nombre)), 0) + 1 // Crédit à: https://stackoverflow.com/a/28203456/6917157

 function getDigitCount(number) { return Math.max(Math.floor(Math.log10(Math.abs(number))), 0) + 1; } 

N ° chiffre du numéro de gauche ou de droite

 function getDigit(number, n, fromLeft) { const location = fromLeft ? getDigitCount(number) + 1 - n : n; return Math.floor((number / Math.pow(10, location - 1)) % 10); } 

Un «nombre» est une chose.

La représentation de ce numéro (p. Ex. La base-10, chaîne "1234") est une autre chose.

Si vous voulez un chiffre particulier dans une chaîne décimale … alors votre meilleur pari est de l'obtenir à partir d'une chaîne 🙂

Q: Vous savez qu'il y a des pièges avec l'arithmétique entière en Javascript, n'est-ce pas?

Q: Pourquoi est-il si important de ne pas utiliser une chaîne? Est-ce une tâche de devoir? Une question d'entrevue?

 function getDigit(number, indexFromRight) { var maxNumber = 9 for (var i = 0; i < indexFromRight - 2; i++) { maxNumber = maxNumber * 10 + 9 } if (number > maxNumber) { number = number / Math.pow(10, indexFromRight - 1) | 0 return number % 10 } else return 0 } 

Vous savez, je comprends que la question demande comment le faire sans numéro, mais le titre "JavaScript: Obtenez le deuxième chiffre d'un numéro?" Signifie que beaucoup de gens trouveront cette réponse lors de la recherche d'un moyen d'obtenir un chiffre spécifique, une période.

Je ne suis pas en train de saisir la question originale, je suis sûr qu'il / elle a eu ses raisons, mais du point de vue pratique de la recherche, je pense qu'il vaut mieux ajouter une réponse qui convertit le nombre en une chaîne et en arrière parce que, si rien d'autre , C'est un moyen beaucoup plus discret et facile à comprendre.

 let digit = Number((n).toString().split('').slice(1,1)) // eg let digit = Number((1234).toString().split('').slice(1,1)) // outputs 2 

Obtenir le chiffre sans conversion de chaîne est génial, mais lorsque vous essayez d'écrire un code clair et concis que d'autres personnes et d'autres, que vous pouvez regarder très rapidement et complètement, je pense qu'une simple conversion de chaîne est une meilleure façon de je le fais.

Je ne sais pas pourquoi vous avez besoin de cette logique, mais la logique suivante vous obtiendra le deuxième numéro

 <script type="text/javascript"> var myVal = 58445456; var var1 = new Number(myVal.toPrecision(1)); var var2 = new Number(myVal.toPrecision(2)); var rem; rem = var1 - var2; var multi = 0.1; var oldvalue; while (rem > 10) { oldvalue = rem; rem = rem * multi; rem = rem.toFixed(); } alert(10-rem); </script> 
 function getNthDigit(val, n) { var modVal = val % Math.pow(10,n);//Remove all digits larger than nth return Math.floor(modVal / Math.pow(10,n-1));//Remove all digits less than nth } 
 var newVar = myVar; while (newVar > 100) { newVar /= 10; } if (newVar > 0 && newVar < 10) { newVar = newVar; } else if (newVar >= 10 && newVar < 20) { newVar -= 10; } else if (newVar >= 20 && newVar < 30) { newVar -= 20; } else if (newVar >= 30 && newVar < 40) { newVar -= 30; } else if (newVar >= 40 && newVar < 50) { newVar -= 40; } else if (newVar >= 50 && newVar < 60) { newVar -= 50; } else if (newVar >= 60 && newVar < 70) { newVar -= 60; } else if (newVar >= 70 && newVar < 80) { newVar -= 70; } else if (newVar >= 80 && newVar < 90) { newVar -= 80; } else if (newVar >= 90 && newVar < 100) { newVar -= 90; } else { newVar = 0; } var secondDigit = Math.floor(newVar); 

Voilà comment je le ferais 🙂

Et voici un JSFiddle montrant qu'il fonctionne 🙂 http://jsfiddle.net/Cuytd/

Cela suppose également que votre numéro d'origine soit toujours supérieur à 9 … Si ce n'est pas toujours supérieur à 9, je suppose que vous ne poserez pas cette question;)