Obtenir le nombre de chiffres avec JavaScript

Comme le titre de mon post l'indique, je voudrais savoir combien de chiffres var number . Par exemple: Si number = 15; ma fonction doit retourner 2 . Actuellement, il ressemble à ceci:

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

mais Safari dit qu'il ne fonctionne pas en raison d'un TypeError :

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

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

78
demandé sur bit4fox 2013-02-14 20:39:18

9 réponses

length est un bien et non 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;
}

mise à jour: comme indiqué dans les commentaires, l'exemple ci-dessus ne fonctionnera pas pour les nombres flottants. Pour le faire fonctionner nous pouvons soit se débarrasser d'une période Avec String(number).replace('.', '').length , ou compter les chiffres avec l'expression régulière: String(number).match(/\d/g).length .

En termes de vitesse potentiellement le moyen le plus rapide pour obtenir nombre de chiffres dans le nombre donné est de faire mathématiquement. Pour entiers positifs il y a 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 ya une solution optimisée brillante de @Mwr247 , mais attention à l'utilisation de Math.log10 , car il n'est pas pris en charge par de nombreux navigateurs hérités. Ainsi, remplacer Math.log10(x) par Math.log(x) * Math.LOG10E résoudra le problème de compatibilité.

la création de solutions mathématiques rapides pour les nombres décimaux ne sera pas facile en raison de comportement bien connu des mathématiques à virgule flottante , donc cast-to-string approche sera plus facile et la preuve folle. Comme mentionné par @streetlogics la coulée rapide peut être faite avec un nombre simple à la concaténation chaîne, conduisant le remplacer solution à transformer en:

var length = (number + '').replace('.', '').length;  // for floats
151
répondu VisioN 2017-05-23 12:34:50

Voici une réponse mathématique (fonctionne aussi pour les nombres négatifs):

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

et une version optimisée de ce qui précède (opérations en bits plus efficaces):

function numDigits(x) {
  return (Math.log10((x ^ (x >> 31)) - (x >> 31)) | 0) + 1;
}

Essentiellement, nous commençons par obtenir la valeur absolue de l'entrée pour permettre aux valeurs négatives de fonctionner correctement. Ensuite, nous exécutons l'opération log10 pour nous donner quelle est la puissance 10 de l'entrée (si vous travailliez dans une autre base, vous utiliseriez le logarithme pour cette base), qui est le nombre de chiffres. Ensuite, nous plaçons la sortie pour saisir seulement la partie entière de cela. Enfin, nous utilisons la fonction max pour fixer les valeurs décimales (toute valeur fractionnaire entre 0 et 1 retourne juste 1, au lieu d'un nombre négatif), et ajouter 1 à la sortie finale pour obtenir le nombre.

ci-dessus suppose (en fonction de votre exemple d'entrée) que vous souhaitez compter le nombre de chiffres entiers (donc 12345 = 5, et donc 12345.678 = 5). Si vous souhaitez compter le nombre total de chiffres dans la valeur (so 12345.678 = 8), puis ajouter ce avant le 'retour' dans l'une ou l'autre des fonctions ci-dessus:

x = Number(String(x).replace(/[^0-9]/g, ''));
44
répondu Mwr247 2015-02-02 15:46:46

depuis que cela est venu sur une recherche Google pour "javascript obtenir le nombre de chiffres", je voulais le jeter là-bas qu'Il ya une alternative plus courte à ce qui repose sur le casting interne à faire 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);

Rendements

3 4
16
répondu streetlogics 2014-05-01 21:17:09

si vous avez besoin de chiffres (après séparateur), vous pouvez simplement diviser le nombre et la longueur du compte deuxième partie (après le point).

function countDigits(number) {
    var sp = (number + '').split('.');
    if (sp[1] !== undefined) {
        return sp[1].length;
    } else {
        return 0;
    }
}
2
répondu Maciej Maciej 2015-10-12 07:59:22

je suis encore en train d'apprendre le Javascript, mais j'ai créé cette fonction il y a quelques temps, qui utilise les mathématiques et une boucle de temps plutôt qu'une chaîne de caractères, alors je l'ai réécrite pour le Javascript. Peut-être que cela pourrait être fait de façon récursive mais je n'ai toujours pas vraiment saisi le concept :( C'est le mieux que j'ai pu trouver. Je ne suis pas sûr de la taille des nombres, il fonctionne avec, il a fonctionné quand j'ai mis dans une centaine de chiffres.

function count_digits(n) {
    numDigits = 0;
    integers = Math.abs(n);

    while (integers > 0) {
        integers = (integers - integers % 10) / 10;
        numDigits++;
    }
    return numDigits;
}

edit: ne fonctionne qu'avec des valeurs entières

1
répondu Nate 2015-11-04 17:47:35

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

1
répondu user40521 2016-05-22 12:01:07

deux chiffres: Fonction simple dans le cas où vous avez besoin de deux ou plusieurs chiffres D'un numéro avec ECMAScript 6 (ES6):

const zeroDigit = num => num.toString().length === 1 ? `0${num}` : num;
0
répondu Rafael Melón 2018-06-05 10:17:18

énoncé du Problème: nombre/pas de chaîne à l'aide de la chaîne.length () jsfunction. Solution: nous pourrions le faire à travers le Forloop. E. g

for (x=0; y>=1 ; y=y/=10){
  x++;
}

if (x <= 10) {
  this.y = this.number;                
}   

else{
  this.number = this.y;
}    

}

0
répondu Yogesh Aggarwal 2018-08-17 10:00:30

La propriété length renvoie la longueur d'une chaîne (nombre de caractères).

La longueur d'une chaîne vide est 0.

var str = "Hello World!";
var n = str.length;

le résultat de n sera: 12

    var str = "";
    var n = str.length;

le résultat de n sera: 0


propriété de la longueur du tableau:


la propriété length définit ou retourne le nombre d'éléments dans un tableau.

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.length;

le résultat sera: 4

syntaxe:

retourne la longueur d'un tableau:

array.length

définit la longueur d'un tableau:

array.length=number
-4
répondu Muhammad Awais 2016-06-02 06:23:53