179 votes

Obtenez le nombre de chiffres avec JavaScript

Comme le titre de mon post le suggère, j'aimerais savoir combien de chiffres var number a. Par exemple : Si number = 15; ma fonction devrait retourner 2 . Actuellement, cela ressemble à ceci :

function getlength(number) {
  return number.toString().length();
}

Mais Safari indique qu'il ne fonctionne pas en raison d'un problème de sécurité. TypeError :

'2' is not a function (evaluating 'number.toString().length()')

Comme vous pouvez le voir, '2' est en fait la bonne solution. Mais pourquoi est-ce not a function ?

0 votes

12/2021 - Ajouter des guillemets aux nombres comme ceci (number+'').length convertira automatiquement le contenu en chaîne de caractères, puis vous pourrez utiliser .length .

303voto

VisioN Points 62518

length est une propriété, pas une méthode. Vous ne pouvez pas l'appeler, donc vous n'avez pas besoin de parenthèses. () :

function getlength(number) {
    return number.toString().length;
}

UPDATE : Comme discuté dans les commentaires, l'exemple ci-dessus ne fonctionne pas pour les nombres flottants. Pour le faire fonctionner, nous pouvons soit supprimer le point avec String(number).replace('.', '').length ou compter les chiffres avec une expression régulière : String(number).match(/\d/g).length .

En termes de vitesse, le moyen le plus rapide d'obtenir le nombre de chiffres d'un nombre donné est de le faire mathématiquement. Pour nombres entiers positifs il existe un merveilleux algorithme avec log10 :

var length = Math.log(number) * Math.LOG10E + 1 | 0;  // for positive integers

Pour tous les types d'entiers (y compris les négatifs), il existe une solution brillante et optimisée à partir de @Mwr247 mais faites attention à l'utilisation de Math.log10 car il n'est pas pris en charge par de nombreux navigateurs existants. Ainsi, en remplaçant Math.log10(x) avec Math.log(x) * Math.LOG10E résoudra le problème de compatibilité.

Il ne sera pas facile de créer des solutions mathématiques rapides pour les nombres décimaux en raison des facteurs suivants comportement bien connu des mathématiques à virgule flottante Ainsi, l'approche de type "cast-to-string" sera plus facile et plus sûre. Comme mentionné par @streetlogics un moulage rapide peut être effectué avec une simple concaténation de nombres en chaînes de caractères, ce qui conduit le remplacer à transformer en solution :

var length = (number + '').replace('.', '').length;  // for floats

3 votes

Bonne technique pour obtenir le nombre de chiffres, mais s'il s'agit d'une fraction de nombre, par exemple 12,5, votre fonction renverra 4 au lieu de 3...

0 votes

@Swarnendu : Ce n'est pas un problème car je n'ai que des entiers.

3 votes

Sinon, il suffit d'utiliser quelque chose comme number.toString().match(/\d/g).length .

23voto

streetlogics Points 1558

Puisque cette question est apparue lors d'une recherche Google sur "javascript get number of digits", je voulais signaler qu'il existe une alternative plus courte à cette méthode, qui repose sur un moulage interne effectué pour vous :

var int_number = 254;
var int_length = (''+int_number).length;

var dec_number = 2.12;
var dec_length = (''+dec_number).length;

console.log(int_length, dec_length);

Rendement

3 4

4 votes

Et un rapide jsperf montre que c'est BEAUCOUP plus rapide, aussi (comme dans 10x ou plus) : jsperf.com/number-tostring-vs-number

3 votes

NOTE ! Le point est également compté comme un nombre. (dans dec_number)

1 votes

Correction pour sauter le point : var dec_length = ('' + dec_number).replace('.', '').length

9voto

A P Points 81

Il serait simple d'obtenir la longueur comme

  `${NUM}`.length

où NUM est le numéro pour obtenir la longueur pour

0 votes

Ne gère pas les valeurs négatives (un moins ajouterait un caractère supplémentaire), ni les valeurs décimales (une virgule ajouterait un caractère supplémentaire). La localisation peut également ajouter des séparateurs entre les groupes de nombres (par exemple 10'000). Cela vaut au moins la peine de le mentionner en tant que mise en garde dans votre réponse.

6voto

Idan Points 85

Vous pouvez l'utiliser dans ce tour :

(''+number).length

3voto

user40521 Points 21
var i = 1;
while( ( n /= 10 ) >= 1 ){ i++ }

23432          i = 1
 2343.2        i = 2
  234.32       i = 3
   23.432      i = 4
    2.3432     i = 5
    0.23432

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