web-dev-qa-db-fra.com

JavaScript: Obtenir le deuxième chiffre d'un nombre?

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

var myVar = 1234;

Maintenant, je veux obtenir le deuxième chiffre (2 dans ce cas) à partir de ce nombre sans le convertir en chaîne auparavant. Est-ce possible?

30
user1856596

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

La solution la plus simple et la plus logique consiste à le convertir en chaîne: 

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

ou 

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

Si vous ne voulez pas le faire facilement, 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 performances, j'ai fait un jsperf . Comme je le fais pour les nombres aléatoires, le log est de loin la solution la plus rapide.

68
Denys Séguret

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

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

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

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

3ème chiffre du numéro de droite = Math.floor ((number/100)% 10)

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

nième chiffre du nombre à partir de la droite = Math.floor ((number/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;
}

nième 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);
}
14
Gerges Beshay

Supprimez les derniers chiffres en divisant le nombre par 10 jusqu'à ce que le nombre soit inférieur à 100, en boucle. Puis 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.
}
4
Vikdor

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

Je ne dénigre pas le demandeur d'origine, je suis sûr qu'il/elle avait ses raisons, mais d'un point de vue pratique, je pense que cela vaut la peine d'ajouter une réponse ici qui convertit le nombre en chaîne et vice-versa, , c’est une façon beaucoup plus concise et facile à comprendre de procéder. 

let digit = Number((n).toString().split('').slice(1,1))

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

Obtenir le chiffre sans la conversion de chaîne est une bonne chose, mais lorsque vous essayez d'écrire un code clair et concis que d'autres personnes et que vous pourrez regarder à l'avenir que vous pouvez regarder très rapidement et que vous comprenez très bien, je pense qu'une conversion rapide de chaîne d'un liner est un meilleur moyen de je le fais. 

3
Chris Schmitz

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
        }

1
Coaxial

Un "numéro" est une chose.

La représentation de ce nombre (par exemple, la chaîne en base 10 "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, correct?

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

1
paulsm4
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
}
0
mutenka

Juste une idée simple pour récupérer toute charte d’un nombre sous forme de chaîne ou int:

const myVar = 1234;
String(myVar).charAt(1)
//"2"
parseInt(String(myVar).charAt(1))
//2
0
Jamie Hutber

Je ne sais pas pourquoi vous avez besoin de cette logique, mais si vous suivez la logique, vous obtiendrez 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>
0
Raghav