Je cherche à obtenir la longueur d'un nombre en JavaScript ou jQuery?
J'ai essayé value.length
sans succès, dois-je d'abord convertir cela en chaîne?
javascript
jquery
Accro au code
la source
la source
Réponses:
Ce processus fonctionnera également pour
Float Number
et pourExponential number
aussi.la source
Ok, tant de réponses, mais c'est une question de mathématiques pures, juste pour le plaisir ou pour se rappeler que les mathématiques sont importantes:
Cela donne en fait la "longueur" du nombre même s'il est sous forme exponentielle.
num
est censé être un entier non négatif ici: s'il est négatif, prenez sa valeur absolue et ajustez le signe par la suite.Mise à jour pour ES2015
Maintenant que
Math.log10
c'est une chose , tu peux simplement écrirela source
Math.ceil
et utilise un plus rapide à laMath.abs
place. Mais honnêtement, je ne m'attendais pas à ce gain de performances dans Chrome ... Bon à savoir!J'ai utilisé cette fonctionnalité dans node.js, c'est mon implémentation la plus rapide à ce jour:
Il doit gérer les entiers positifs et négatifs (également sous forme exponentielle) et doit renvoyer la longueur de la partie entière en flottants.
La référence suivante devrait fournir un aperçu de la méthode: Weisstein, Eric W. «Number Length». De MathWorld - Une ressource Web Wolfram.
Je crois qu'une opération au niveau du bit peut remplacer Math.abs, mais jsperf montre que Math.abs fonctionne très bien dans la majorité des moteurs js.
Mise à jour : comme indiqué dans les commentaires, cette solution présente quelques problèmes :(
Update2 (solution de contournement) : Je crois qu'à un moment donné, des problèmes de précision surviennent et que le
Math.log(...)*0.434...
se comporte de manière inattendue. Cependant, si Internet Explorer ou les appareils mobiles ne sont pas votre tasse de thé, vous pouvez remplacer cette opération par laMath.log10
fonction. Dans Node.js, j'ai écrit un test de base rapide avec la fonctionnLength = (n) => 1 + Math.log10(Math.abs(n) + 1) | 0;
et avecMath.log10
cela a fonctionné comme prévu. Veuillez noter que ceMath.log10
n'est pas universellement pris en charge.la source
Vous devez faire le nombre en chaîne pour prendre de la longueur
ou
la source
Pourrait également utiliser une chaîne de modèle:
la source
Eh bien, sans convertir l'entier en chaîne, vous pouvez créer une boucle funky:
Démo: http://jsfiddle.net/maniator/G8tQE/
la source
.
dans le cadre du calcul.Commencez par le convertir en chaîne:
L'ajout d'une chaîne vide à celui-ci entraînera implicitement
mynumber
sa transformation en chaîne.la source
Il y a trois façons de procéder.
meilleure performance (meilleure performance dans ie11)
Math (meilleures performances dans Chrome, Firefox mais plus lentes dans ie11)
il y a un jspref ici http://jsperf.com/fastest-way-to-get-the-first-in-a-number/2
la source
Vous devriez opter pour le plus simple (stringLength), la lisibilité bat toujours la vitesse. Mais si vous vous souciez de la vitesse, voici quelques exemples ci-dessous.
Trois méthodes différentes, toutes à vitesse variable.
la source
On m'a posé une question similaire lors d'un test.
Des nombres négatifs ont été ajoutés pour le compliquer un peu plus, d'où Math.abs ().
la source
Je voudrais corriger la réponse @Neal qui était assez bonne pour les entiers, mais le nombre 1 renverrait une longueur de 0 dans le cas précédent.
la source
Essaye ça:
Exemple d'utilisation
la source
Oui, vous devez convertir en chaîne pour trouver la longueur, par exemple
la source