Ich möchte die Länge einer Zahl in JavaScript oder jQuery ermitteln.
Ich habe es value.length
ohne Erfolg versucht. Muss ich dies zuerst in einen String konvertieren?
javascript
jquery
Code Junkie
quelle
quelle
Antworten:
Dieser Prozess wird auch für
Float Number
und fürExponential number
auch funktionieren .quelle
Ok, so viele Antworten, aber dies ist eine reine Mathematik, nur zum Spaß oder um sich daran zu erinnern, dass Mathematik wichtig ist:
Dies gibt tatsächlich die "Länge" der Zahl an, selbst wenn sie in Exponentialform vorliegt.
num
soll hier eine nicht negative ganze Zahl sein: Wenn es negativ ist, nimm seinen absoluten Wert und passe das Vorzeichen danach an.Update für ES2015
Nun, das
Math.log10
ist eine Sache , Sie können einfach schreibenquelle
Math.ceil
und verwendetMath.abs
stattdessen ein schnelleres . Aber ich habe ehrlich gesagt nicht mit diesem Leistungszuwachs in Chrome gerechnet ... Gut zu wissen!Ich habe diese Funktionalität in node.js verwendet. Dies ist meine bisher schnellste Implementierung:
Es sollte positive und negative Ganzzahlen (auch in Exponentialform) verarbeiten und die Länge des Ganzzahlteils in Gleitkommazahlen zurückgeben.
Die folgende Referenz soll einen Einblick in die Methode geben: Weisstein, Eric W. "Number Length". Aus MathWorld - Eine Wolfram-Webressource.
Ich glaube, dass eine bitweise Operation die Math.abs ersetzen kann, aber jsperf zeigt, dass Math.abs in den meisten js-Engines einwandfrei funktioniert.
Update : Wie in den Kommentaren erwähnt, weist diese Lösung einige Probleme auf :(
Update2 (Problemumgehung) : Ich glaube, dass irgendwann Präzisionsprobleme auftreten und sich das
Math.log(...)*0.434...
einfach unerwartet verhält. Wenn Internet Explorer oder mobile Geräte jedoch nicht Ihre Sache sind, können Sie diesen Vorgang durch dieMath.log10
Funktion ersetzen . In Node.js habe ich einen kurzen Basistest mit der Funktion geschriebennLength = (n) => 1 + Math.log10(Math.abs(n) + 1) | 0;
undMath.log10
damit wie erwartet funktioniert . Bitte beachten Sie, dass diesMath.log10
nicht allgemein unterstützt wird.quelle
Sie müssen die Nummer in die Zeichenfolge eingeben, um die Länge zu bestimmen
oder
quelle
Könnte auch eine Vorlagenzeichenfolge verwenden:
quelle
Nun, ohne die Ganzzahl in einen String umzuwandeln, könnten Sie eine funky Schleife erstellen:
Demo: http://jsfiddle.net/maniator/G8tQE/
quelle
.
als Teil der Berechnung berücksichtigt.Konvertieren Sie es zuerst in einen String:
Wenn Sie eine leere Zeichenfolge hinzufügen, wird dies implizit
mynumber
zu einer Zeichenfolge.quelle
Es gibt drei Möglichkeiten, dies zu tun.
bessere Leistung eins (beste Leistung in ie11)
Mathe (beste Leistung in Chrome, Firefox, aber am langsamsten in IE11)
Hier gibt es ein jspref http://jsperf.com/fastest-way-to-get-the-first-in-a-number/2
quelle
Sie sollten sich für die einfachste (stringLength) entscheiden, die Lesbarkeit übertrifft immer die Geschwindigkeit. Aber wenn Sie Wert auf Geschwindigkeit legen, finden Sie hier einige.
Drei verschiedene Methoden, alle mit unterschiedlicher Geschwindigkeit.
quelle
In einem Test wurde mir eine ähnliche Frage gestellt.
Negative Zahlen wurden hinzugefügt, um es etwas komplizierter zu machen, daher die Math.abs ().
quelle
Ich möchte die @ Neal-Antwort korrigieren, die für ganze Zahlen ziemlich gut war, aber die Zahl 1 würde im vorherigen Fall eine Länge von 0 zurückgeben.
quelle
Versuche dies:
Beispiel dafür in Gebrauch
quelle
Ja, Sie müssen in einen String konvertieren, um die Länge zu ermitteln. Zum Beispiel
quelle