111 votes

Veuillez traduire ceci tout en conservant les mêmes balises HTML, le cas échéant, de l'anglais vers le français : JavaScript Nombre divisé en chiffres individuels

Je suis en train d'essayer de résoudre un problème de mathématiques où je prends un nombre par exemple 45, ou 111 et ensuite je divise le nombre en chiffres séparés par exemple 4 5 ou 1 1 1. Ensuite, je vais enregistrer chaque nombre dans une variable pour exécuter une méthode. Est-ce que quelqu'un sait comment diviser un nombre en chiffres individuels?

Par exemple, j'ai une boucle qui s'exécute sur un tableau :

for (var i = 0; i < range.length; i++) {
  var n = range[i];
}

Pour chaque nombre, j'aimerais diviser ses chiffres et les additionner?

139voto

Brian Glaz Points 5833
var num = 123456;
var digits = num.toString().split('');
var realDigits = digits.map(Number)
console.log(realDigits);

81voto

Lapple Points 1740
var number = 12354987,
    output = [],
    sNumber = number.toString();

for (var i = 0, len = sNumber.length; i < len; i += 1) {
    output.push(+sNumber.charAt(i));
}

console.log(output);

/* Résultats :
 *
 * [1, 2, 3, 5, 4, 9, 8, 7]
 */ 

MISE À JOUR : Calcul d'une somme

for (var i = 0, sum = 0; i < output.length; sum += output[i++]);
console.log(sum);

/*
 * Résultats : 39
 */

63voto

Shadow Wizard Points 38568

Vous pouvez également le faire de manière "mathématique" sans traiter le nombre comme une chaîne de caractères :

var num = 278;
var digits = [];
while (num != 0) {
    digits.push(num % 10);
    num = Math.trunc(num / 10);
}
digits.reverse();
console.log(digits);

Un avantage que je vois est que vous n'aurez pas à exécuter parseInt() sur chaque chiffre, vous traitez les chiffres réels en tant que valeurs numériques.

38voto

Marco Gaspari Points 81

C'est le plus court que j'ai trouvé, même s'il renvoie les chiffres comme des chaînes de caractères:

let num = 12345;

[...num+''] //["1", "2", "3", "4", "5"]

Ou utilisez ceci pour obtenir des entiers:

[...num+''].map(n=>+n) //[1, 2, 3, 4, 5]

15voto

George Jempty Points 3660

Je vais fournir une variation d'une réponse déjà donnée pour que vous puissiez voir une approche différente qui préserve le type numérique tout au long :

var number = 12354987,
    output = [];

while (number) {
    output.push(number % 10);
    number = Math.floor(number/10);
}

console.log(output.reverse().join(',')); // 1,2,3,5,4,9,8,7

J'ai utilisé une technique similaire à celle ci-dessus avec succès lors de la conversion d'un nombre en chiffres romains, ce qui est l'une de mes façons préférées de commencer à apprendre un langage de programmation avec lequel je ne suis pas familier. Par exemple, voici comment j'ai conçu une méthode pour convertir des nombres en chiffres romains avec Tcl peu après le changement de siècle : http://code.activestate.com/recipes/68379-conversion-to-roman-numerals/

Les lignes comparables dans mon script Tcl étant :

  while {$arabic} {
    set digit [expr {$arabic%10}]
    set arabic [expr {$arabic/10}]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X