Wie konvertiere ich eine Zeichenfolge in eine Ganzzahl in JavaScript?
javascript
string
integer
data-conversion
cubuspl42
quelle
quelle
Antworten:
Der einfachste Weg wäre, die native
Number
Funktion zu verwenden:Wenn das bei Ihnen nicht funktioniert, gibt es die Methoden parseInt , unary plus , parseFloat with floor und Math.round .
parseInt:
unäres Plus, wenn Ihre Zeichenfolge bereits die Form einer Ganzzahl hat:
Wenn Ihre Zeichenfolge ein Float ist oder sein könnte und Sie eine Ganzzahl möchten:
oder, wenn Sie Math.floor mehrmals verwenden:
Wenn Sie der Typ sind, der beim Aufrufen von parseInt vergisst, den Radix einzufügen, können Sie parseFloat verwenden und ihn nach Belieben runden. Hier benutze ich Boden.
Interessanterweise führt Math.round (wie Math.floor) eine Konvertierung von Zeichenfolgen in Zahlen durch. Wenn Sie also die Zahl runden möchten (oder wenn Sie eine Ganzzahl in der Zeichenfolge haben), ist dies eine großartige Möglichkeit, vielleicht mein Favorit:
quelle
'4'>>0
und'4'>>>0
.parseInt
undparseFloat
nimmt gerne Briefe an. NurNumber
kehrtNaN
konsequent.NaN
für jeden Wert erfolgen, der nicht genau eine Ganzzahl ist. DaherNumber('2.2')
wirkt keines von diesen als Zwang zu2
und Zwang zuNumber('')
0.Versuchen Sie die Funktion parseInt:
Aber es gibt ein Problem. Wenn Sie versuchen, "010" mit der Funktion parseInt zu konvertieren, wird diese als Oktalzahl erkannt und gibt die Zahl 8 zurück. Sie müssen also einen Radix (von 2 bis 36) angeben. In diesem Fall Basis 10.
Beispiel:
Beachten Sie, dass
parseInt
fehlerhafte Daten nach dem Parsen von gültigen Daten ignoriert werden.Diese Anleitung wird als 51 analysiert:
quelle
parseInt('0asdf', 10)
produziert0
.Es gibt zwei Möglichkeiten, eine Zeichenfolge in eine Zahl in Javascript umzuwandeln. Eine Möglichkeit besteht darin, es zu analysieren, und die andere darin, seinen Typ in eine Zahl zu ändern. Alle Tricks in den anderen Antworten (z. B. unäres Plus) beinhalten das implizite Erzwingen des Typs der Zeichenfolge zu einer Zahl. Sie können dasselbe auch explizit mit der Zahlenfunktion tun.
Parsing
parseInt und parseFloat sind die beiden Funktionen zum Parsen von Zeichenfolgen in Zahlen. Das Parsen wird stillschweigend gestoppt, wenn es auf ein Zeichen trifft, das es nicht erkennt. Dies kann nützlich sein, um Zeichenfolgen wie "92px" zu analysieren, ist aber auch etwas gefährlich, da es bei schlechten Eingaben keine Fehler gibt, sondern Sie Ich bekomme NaN zurück, es sei denn, die Zeichenfolge beginnt mit einer Zahl. Leerzeichen am Anfang der Zeichenfolge werden ignoriert. Hier ist ein Beispiel dafür, wie Sie etwas anderes tun, als Sie möchten, und keinen Hinweis darauf geben, dass etwas schief gelaufen ist:
Es wird empfohlen, immer den Radix als zweites Argument anzugeben. Wenn in älteren Browsern die Zeichenfolge mit einer 0 beginnt, wird sie als oktal interpretiert, wenn der Radix nicht angegeben wird, was viele Leute überrascht hat. Das Verhalten für Hexadezimal wird ausgelöst, indem die Zeichenfolge mit 0x beginnt, wenn kein Radix angegeben ist, z
0xff
. Der Standard hat sich mit Ecmascript 5 tatsächlich geändert, sodass moderne Browser kein Oktal mehr auslösen, wenn eine führende 0 vorhanden ist, wenn kein Radix angegeben wurde. parseInt versteht Radixe bis zur Basis 36, in diesem Fall werden sowohl Groß- als auch Kleinbuchstaben als gleichwertig behandelt.Ändern des Typs einer Zeichenfolge in eine Zahl
Bei allen anderen oben genannten Tricks, bei denen parseInt nicht verwendet wird, wird die Zeichenfolge implizit in eine Zahl gezwungen. Ich mache das lieber explizit,
Dies hat ein anderes Verhalten als die Analysemethoden (obwohl Leerzeichen immer noch ignoriert werden). Es ist strenger: Wenn es nicht die gesamte Zeichenfolge versteht, als es zurückgibt
NaN
, können Sie es nicht für Zeichenfolgen wie verwenden97px
. Da Sie eine primitive Zahl anstelle eines Number-Wrapper-Objekts möchten, stellen Sie sicher, dass Sie nichtnew
vor die Number-Funktion stellen.Wenn Sie in eine Zahl konvertieren, erhalten Sie natürlich einen Wert, der möglicherweise eher ein Float als eine Ganzzahl ist. Wenn Sie also eine Ganzzahl möchten, müssen Sie diese ändern. Hierfür gibt es einige Möglichkeiten:
Jeder bitweise Operator (hier habe ich ein bitweises oder, aber Sie könnten auch eine doppelte Negation wie in einer früheren Antwort oder einer Bitverschiebung durchführen) konvertiert den Wert in eine 32-Bit-Ganzzahl, und die meisten von ihnen konvertieren in eine vorzeichenbehaftete Ganzzahl. Beachten Sie, dass dies nicht für große Ganzzahlen gewünscht wird . Wenn die Ganzzahl nicht in 32 Bit dargestellt werden kann, wird sie umgebrochen.
Um mit größeren Zahlen richtig zu arbeiten, sollten Sie die Rundungsmethoden verwenden
Beachten Sie, dass alle diese Methoden Exponentialnotation verstehen, so
2e2
ist200
statt NaN. Außerdem versteht Number "Unendlichkeit", während die Analysemethoden dies nicht tun.Benutzerdefiniert
Es ist unwahrscheinlich, dass eine dieser Methoden genau das tut, was Sie wollen. Normalerweise möchte ich beispielsweise, dass ein Fehler ausgelöst wird, wenn das Parsen fehlschlägt, und ich benötige keine Unterstützung für Infinity, Exponentiale oder führende Leerzeichen. Abhängig von Ihrem Anwendungsfall ist es manchmal sinnvoll, eine benutzerdefinierte Konvertierungsfunktion zu schreiben.
Überprüfen Sie immer, ob die Ausgabe von Number oder einer der Analysemethoden der Art von Nummer entspricht, die Sie erwarten. Mit ziemlicher Sicherheit möchten Sie sicherstellen
isNaN
, dass die Nummer nicht NaN ist (normalerweise ist dies der einzige Weg, um herauszufinden, dass die Analyse fehlgeschlagen ist).quelle
97,8,00
und nicht. Ein einfacher Trick besteht darin, einen zu machen.replace(/[^0-9]/g, "")
, der alle nicht-Ziffern aus Ihrer Zeichenfolge entfernt und anschließend die Konvertierung durchführt. Dies wird natürlich alle Arten von verrückten Zeichenfolgen ignorieren, bei denen Sie wahrscheinlich Fehler machen sollten, anstatt nur zu analysieren ....replace(/[^0-9.]/g, "")
, sonst wird "1.05" zu "105".var fixed = Number("97.654").toFixed(0); // rounded rather than truncated
wir einestring
(aufgrund der.toFixed
Methode) anstelle einernumber
(Ganzzahl). Wenn wir die gerundete ganze Zahl wollen, ist es wahrscheinlich besser, nur zu verwendenMath.round("97.654");
ParseInt () und + sind unterschiedlich
quelle
Obwohl eine alte Frage, aber vielleicht kann dies für jemanden hilfreich sein.
Ich verwende diese Art der Konvertierung von Zeichenfolgen in
int-ZahlenWenn Sie also mit 1 multiplizieren, ändert sich der Wert nicht, aber js gibt automatisch eine Zahl zurück.
Wie unten gezeigt, sollte dies verwendet werden, wenn Sie sicher sind, dass
str
es sich um eine Zahl handelt (oder als Zahl dargestellt werden kann). Andernfalls wird NaN zurückgegeben - keine Zahl.Sie können eine einfache Funktion erstellen, z
quelle
Am schnellsten
Prüfung
Hier ist ein kleiner Vergleich der Geschwindigkeit (nur Mac Os) ... :)
Für Chrom sind 'plus' und 'mul' am schnellsten (> 700.000,00 op / sec), 'Math.floor' am langsamsten. Für Firefox ist 'plus' am langsamsten (!) 'Mul' ist am schnellsten (> 900.000.000 op / sec). In Safari ist 'parseInt' Fasten, 'Zahl' ist am langsamsten (aber die Ergebnisse sind ziemlich ähnlich,> 13.000.000 <31.000.000). Safari für Cast String to Int ist also mehr als 10x langsamer als andere Browser. Der Gewinner ist also ' mul ' :)
Sie können es in Ihrem Browser über diesen Link https://jsperf.com/js-cast-str-to-number/1 ausführen
Aktualisieren
Ich teste auch
var x = ~~"1000";
- auf Chrome und Safari ist etwas langsamer alsvar x = "1000"*1
(<1%), auf Firefox etwas schneller (<1%). Ich aktualisiere das obige Bild und teste esquelle
Versuchen Sie es mit parseInt.
quelle
Ich habe hier die falsche Antwort gepostet, sorry. Fest.
Dies ist eine alte Frage, aber ich liebe diesen Trick:
Das doppelte bitweise Negativ fällt nach dem Dezimalpunkt ab UND konvertiert es in ein Zahlenformat. Mir wurde gesagt, dass es etwas schneller ist als das Aufrufen von Funktionen und so weiter, aber ich bin nicht ganz überzeugt.
BEARBEITEN: Eine andere Methode, die ich gerade hier gesehen habe (eine Frage zum Javascript >>> -Operator, bei dem es sich um eine Rechtsverschiebung mit Nullfüllung handelt ), die zeigt, dass das Verschieben einer Zahl um 0 mit diesem Operator die Zahl in eine uint32 konvertiert, was nett ist, wenn Sie will es auch ohne Vorzeichen . Dies wird wiederum in eine vorzeichenlose Ganzzahl konvertiert , was zu seltsamen Verhaltensweisen führen kann, wenn Sie eine vorzeichenbehaftete Zahl verwenden.
quelle
Seien Sie vorsichtig, wenn Sie parseInt verwenden, um einen Float in wissenschaftliche Notation umzuwandeln! Zum Beispiel:
wird darin enden, dass
anstatt
quelle
parseInt
würde für einen Schwimmer nicht richtig funktionieren.parseFloat
funktioniert in diesem Fall einwandfrei.Um einen String in eine Ganzzahl umzuwandeln, empfehle ich die Verwendung von parseFloat und NOT parseInt. Hier ist der Grund:
Verwenden von parseFloat:
Verwenden von parseInt:
Wenn Sie also bemerkt haben, dass parseInt die Werte nach den Dezimalstellen verwirft, können Sie mit parseFloat mit Gleitkommazahlen arbeiten und sind daher besser geeignet, wenn Sie die Werte nach den Dezimalstellen beibehalten möchten. Verwenden Sie parseInt genau dann, wenn Sie sicher sind, dass Sie den ganzzahligen Wert möchten.
quelle
Auch als Randnotiz: Mootools hat die Funktion toInt (), die für jede native Zeichenfolge (oder float (oder Ganzzahl)) verwendet wird.
quelle
SyntaxError
, dass a , Sie einen doppelten Punkt verwenden sollten, z. B.:2..toInt();
Der erste Punkt beendet die Darstellung einesNumber
Literal und der zweite Punkt ist der Eigenschaftszugriff.Bitte sehen Sie sich das folgende Beispiel an. Es wird Ihnen helfen, Ihre Zweifel auszuräumen
Mit der Parseint-Funktion wird nur die vorhandene Ganzzahl op angegeben, nicht die Zeichenfolge
quelle
wir können verwenden
+(stringOfNumber)
anstatt zu verwendenparseInt(stringOfNumber)
Beispiel:
+("21")
Gibt int von 21 wie das zurückparseInt("21")
.Wir können diesen unären "+" - Operator auch zum Parsen von float verwenden ...
quelle
+
?parseInt
ist. Eine übliche Implementierungconst myNumber = +myNumberAsAString
sieht auf den ersten Blick wie ein Standard+=
oder=+
Operator aus. Auch bei falscher Verwendung kann es zu Verkettungsfehlern kommen. Diese Lösung wird auf der Tatsache basiert , dass 0 wird angenommen , wie auf der linken Seite , wenn keine Nummer versehen ist.Versuchen Sie
str - 0
zu konvertierenstring
zunumber
.Hier sind zwei Links, um die Leistung verschiedener Möglichkeiten zum Konvertieren von Zeichenfolgen in int zu vergleichen
https://jsperf.com/number-vs-parseint-vs-plus
http://phrogz.net/js/string_to_number.html
quelle
'1'
wird auf umgerechnet werden1
durchToNumber
, dann1 - 0
wäre1
In JavaScript gibt es viele Möglichkeiten, eine Zeichenfolge in einen Zahlenwert umzuwandeln ... Wählen Sie einfach und praktisch die Art und Weise, wie eine für Sie funktioniert:
Auch jede mathematische Operation konvertiert sie in Zahlen, zum Beispiel ...
Meine bevorzugte Methode ist die Verwendung von
+
Zeichen. Dies ist die elegante Methode, um eine Zeichenfolge in JavaScript in Zahlen umzuwandeln.quelle
Google gab mir diese Antwort als Ergebnis, also ...
Ich musste tatsächlich eine Zeichenfolge als Ganzzahl "speichern", um eine Bindung zwischen C und JavaScript herzustellen, also konvertierte ich die Zeichenfolge in einen Ganzzahlwert:
quelle
int2str
stoppt Ihre Funktion, wenn ein Byte 0 ist, was ein legitimes Element innerhalb des Werts sein kann.if
Daherbreak
sollte das ... entfernt werden, damit Sie einen vollständigen 4-Byte-Wert erhalten.Meiner Meinung nach deckt keine Antwort alle Randfälle ab, da das Parsen eines Floats zu einem Fehler führen sollte.
quelle
parseInteger
nichtparseNumber
. Ich denke, jede Lösung ist eine Problemumgehung, da JS keine Ganzzahlen und Floats als separate Typen unterstützt. Wir könntennull
stattdessen zurückkehrenNaN
, wenn Not A Number irreführend ist.Hier ist die einfachste Lösung
Einfachere Lösung
quelle
Alle oben genannten sind korrekt. Bitte stellen Sie vorher sicher, dass dies eine Zahl in einer Zeichenfolge ist, indem Sie "typeot x === 'number'" ausführen. Andernfalls wird NaN zurückgegeben
quelle
var num1 = "12423"; typeof num1;
zurückgegebenstring
.Eine andere Möglichkeit besteht darin, den Wert mit sich selbst zu verdoppeln:
Dies wird Folgendes ausgeben:
quelle
Ich habe nur ein Pluszeichen (+) vor dem String hinzugefügt und das war die Lösung!
Ich hoffe es hilft ;)
quelle
Summieren der Multiplikation von Ziffern mit ihrer jeweiligen Zehnerpotenz:
dh: 123 = 100 + 20 + 3 = 1 * 100 + 2 + 10 + 3 * 1 = 1 * (10 ^ 2) + 2 * (10 ^ 1) + 3 * (10 ^ 0)
}}
quelle
quelle
ich benutze das
Auf diese Weise bekomme ich immer ein int zurück.
quelle
Der sicherste Weg, um sicherzustellen, dass Sie eine gültige Ganzzahl erhalten:
Beispiele:
quelle
quelle
Sie können plus verwenden, zum Beispiel =>
var personAge = '24'; var personAge1 = (+ personAge)
dann können Sie sehen, dass der Typ der PersonAge die Nummer ist
quelle