Konvertiert einen string in einen integer?
Wie konvertiere ich einen string in einen integer in JavaScript?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie konvertiere ich einen string in einen integer in JavaScript?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der einfachste Weg wäre, um die native
Number
Funktion:Wenn das nicht für Sie arbeiten, dann gibt es die parseInt, unäre plus, parseFloat mit Boden, und Math.Runde Methoden.
parseInt:
unäre plus
wenn Ihr string ist bereits in form einer ganzen Zahl:
wenn Ihr string ist oder sein könnte, ein schweben und Sie wollen einen integer:
oder, wenn du gehst, werden mithilfe von Math.Boden mehrmals:
Wenn du bist der Typ, der vergisst zu setzen, die radix ist in, wenn Sie anrufen, parseInt verwenden, können Sie parseFloat und Runden Sie es wie Sie wollen. Hier verwende ich Boden.
Interessant, Math.Runde (wie Mathematik.Etage) wird in einen string zu Zahl-Konvertierung, so dass, wenn Sie wollen, dass die gerundete Zahl (oder, wenn Sie eine ganze Zahl im string), dies ist eine großartige Möglichkeit, vielleicht mein Favorit:
'4'>>0
und'4'>>>0
.parseInt
undparseFloat
fröhlich akzeptiert Briefe. NurNumber
zurückNaN
konsequent.NaN
für jeden Wert, der nicht genau eine ganze Zahl. Also keiner dieser arbeiten alsNumber('2.2')
zwingt zu2
undNumber('')
zwingen zu 0.Versuchen parseInt-Funktion:
Aber es gibt ein problem. Wenn Sie versuchen, zu konvertieren "010" mit parseInt-Funktion, erkennt es als Oktalzahl, und wird wieder die Nummer 8. Also, Sie müssen geben Sie eine Basis (2 bis 36). In diesem Fall zur Basis 10.
Beispiel:
Beachten Sie, dass
parseInt
ignoriert fehlerhafte Daten nach der Analyse nichts gilt.Diese guid wird geparst 51:
parseInt('0asdf', 10)
produziert0
.Gibt es zwei Möglichkeiten, um zu konvertieren eine Zeichenfolge in eine Zahl, die in javascript. Eine Möglichkeit ist es, zu analysieren, und der andere Weg ist, um ändern Sie den Typ auf eine Zahl. All die tricks, die in den anderen Antworten (z.B. unäre plus) beinhalten implizit die Nötigung die Art der Zeichenfolge in eine Zahl. Sie können auch das gleiche tun, explizit mit der Anzahl-Funktion.
Analyse
parseInt und parseFloat sind die beiden Funktionen zum Parsen von strings in zahlen. Analyse halt still, wenn es trifft ein Zeichen nicht erkennen, was nützlich sein kann zum Parsen von Zeichenketten wie "92px", aber es ist auch etwas gefährlich, da es nicht geben Ihnen jede Art von Fehler auf schlechten input, statt Sie zurück zu bekommen NaN, es sei denn, der string beginnt mit einer Zahl. Whitespace-Zeichen am Anfang der Zeichenkette ignoriert. Hier ist ein Beispiel dafür, etwas anderes zu tun, was Sie wollen, und geben keine Anzeichen, dass etwas schief ging:
Es ist gute Praxis, immer die Angabe der Basis als das zweite argument. In älteren Browsern, wenn die Zeichenfolge begann mit einer 0, so würde es interpretiert werden als oktal, wenn die Basis nicht angegeben, die hat eine Menge Leute überraschen. Das Verhalten für den hexadezimalen wird ausgelöst durch mit der Zeichenfolge beginnen mit 0x, wenn keine Basis angegeben ist, z.B.
0xff
. Der standard geändert, mit ecmascript 5, so dass moderne Browser nicht mehr auslösen, oktal, wenn es eine führende 0, wenn keine Basis angegeben wurde. parseInt versteht radixes bis zur Basis 36, in diesem Fall sowohl groß-und Kleinbuchstaben werden als gleichwertig behandelt.Die änderung der Art einer Zeichenfolge in eine Zahl
Alle anderen tricks oben erwähnt, die nicht mit parseInt, beinhalten implizit die Nötigung der string in eine Zahl um. Ich ziehe dies ausdrücklich tun,
Dieses unterschiedliche Verhalten auf die parse-Methoden (obwohl es immer noch ignoriert whitespace-Zeichen). Es ist strenger: wenn Sie nicht verstehen, die gesamte Zeichenfolge als es wieder
NaN
, so können Sie es nicht verwenden für strings wie97px
. Da möchte man eine primitive Zahl anstelle einer Zahl wrapper-Objekt, stellen Sie sicher, dass Sie nicht setzennew
vor der Anzahl-Funktion.Offensichtlich, Umwandlung einer Zahl gibt man einen Wert, der vielleicht ein float statt integer, wenn Sie so wollen, eine ganze Zahl, die Sie brauchen, um es zu ändern. Es gibt ein paar Möglichkeiten, dies zu tun:
Alle bitweisen operator (hier hab ich getan, eine bitweise oder-Verknüpfung, aber Sie können auch die doppelte negation, wie in einer früheren Antwort oder ein bitshift) wandelt den Wert für eine 32bit-Ganzzahl, und die meisten von Ihnen konvertieren in eine Ganzzahl. Beachten Sie, dass diese nicht tun wollen, Sie wollen, für große Ganzzahlen. Wenn die ganze Zahl kann dargestellt werden in 32-bit, es wird wrap.
Um korrekt zu arbeiten mit größeren zahlen, sollten Sie die Rundung Methoden
Bedenken, dass alle diese Methoden verstehen, exponentielle Schreibweise, also
2e2
ist200
eher als NaN. Auch, die Anzahl der versteht, "Unendlichkeit", während der parse-Methoden nicht.Benutzerdefinierte
Ist es unwahrscheinlich, dass eine dieser Methoden genau das tun, was Sie wollen. Zum Beispiel, in der Regel würde ich wollen, dass ein Fehler geworfen, wenn das Parsen fehlschlägt, und ich brauche keine Unterstützung für die Unendlichkeit, Exponentialfunktionen oder führenden Leerzeichen. Je nach Anwendungsfall ist es manchmal sinnvoll, zu schreiben, eine benutzerdefinierte Konvertierung-Funktion.
Immer überprüfen, dass die Ausgabe von Zahl oder einer der parse-Methoden ist die Art von Nummer, die Sie erwarten. Sie werden mit ziemlicher Sicherheit verwenden möchten
isNaN
um sicherzustellen, dass die Nummer nicht NaN (in der Regel der einzige Weg, Sie finden heraus, dass das Parsen fehlgeschlagen ist).97,8,00
und ähnliches-oder nicht. Ein einfacher trick besteht darin, eine.replace(/[^0-9]/g, "")
wird entfernen Sie alle nicht-Ziffern aus der Zeichenfolge und dann die Konvertierung danach. Dies wird natürlich ignorieren, alle Arten von verrückten strings, sollten Sie wahrscheinlich die Fehler auf, anstatt Sie einfach zu Parsen....replace(/[^0-9.]/g, "")
, sonst "1.05" wird zu "105".var fixed = Number("97.654").toFixed(0); // rounded rather than truncated
bekommen wirstring
(wegen der.toFixed
- Methode) anstelle desnumber
(integer). Wenn wir wollen, dass die abgerundete Ganzzahl ist es wahrscheinlich besser, verwenden Sie einfachMath.round("97.654");
ParseInt() und + sind verschiedene
Zwar eine alte Frage, aber vielleicht kann dies hilfreich sein, um jemanden.
Ich diese Möglichkeit der Umwandlung von string
intAnzahlSo, wenn Sie durch Multiplikation mit 1, der Wert ändert sich nicht, aber js automatisch eine Zahl zurück.
Aber wie es unten gezeigt wird, sollte dieser verwendet werden, wenn Sie sicher sind, dass die
str
ist eine Zahl(oder dargestellt werden kann, als eine Zahl), sonst wird es wieder NaN - not a number.können Sie erstellen einfache Funktion zu verwenden, z.B.
Versuchen parseInt.
Schnellste
Test
Hier ist kein Vergleich von Geschwindigkeit (nur Mac Os)... 🙂
Chrom 'plus' und 'mul' ist der Schnellste (>700,000,00 op/Sek.), 'Math.Etage " am langsamsten ist. Für Firefox 'plus' ist der langsamste (!) 'mul' ist am schnellsten (>900,000,000 op/Sek.). In Safari 'parseInt' ist die Schnellste, 'Nummer' ist die langsamste (aber resulats ziemlich ähnlich sind, >13,000,000 <31,000,000). Also Safari für den cast von string zu int ist mehr als 10x langsamer als andere Browser. So der Gewinner ist " mul' 🙂
Können Sie führen Sie es auf Ihrem browser mit diesem link
https://jsperf.com/js-cast-str-to-number/1
Update
Ich auch testen
var x = ~~"1000";
- in Chrome und Safari ist ein wenig langsamer alsvar x = "1000"*1
(<1%), im Firefox ist ein wenig schneller (<1%). Ich update oben im Bild und testIch falsch gepostet das hier beantworten, sorry. behoben.
Dies ist eine alte Frage, aber ich Liebe diesen trick:
Den Doppel-bitweise negativ fällt alles, was nach dem Komma UND wandelt es in ein Zahlenformat. Ich habe gesagt, es ist etwas schneller als das aufrufen von Funktionen und so weiter, aber ich bin nicht ganz davon überzeugt.
EDIT: eine Andere Methode, die ich gerade gesehen hier (eine Frage, über die javascript - >>> - operator, der ein zero-fill right shift), die zeigt, dass eine Verschiebung eine Zahl durch 0 mit diesem operator wandelt die Zahl in eine uint32 das ist schön, wenn Sie auch wollen, dass es unsigned. Wieder, diese konvertiert unsigned integer, die führen kann zu seltsamen Verhalten, wenn Sie eine Zahl unterzeichnet.
Vorsicht, wenn Sie verwenden parseInt konvertieren von float in Exponentialschreibweise!
Zum Beispiel:
Folge
statt
parseInt
wäre nicht die richtige Arbeit für einen float.parseFloat
funktioniert in diesem Fall.Auch als eine Randnotiz: Mootools hat die Funktion toInt (), die verwendet wird, auf eine native string (oder float (oder integer)).
SyntaxError
sind, sollten Sie einen doppelten Punkt, z.B.:2..toInt();
den ersten Punkt endet die Darstellung einerNumber
wörtlichen und der zweite Punkt ist der property-accessor.Konvertieren von String in Integer, empfehle ich die Verwendung parseFloat und NICHT parseInt. Ist hier, warum:
Mit parseFloat:
Mit parseInt:
Also, wenn Sie bemerkt haben, parseInt verwirft die Werte nach der Dezimalstellen, während parseFloat ermöglicht Ihnen die Arbeit mit floating-point-zahlen und damit mehr für Sie geeignet, wenn Sie wollen, behalten die Werte nach Dezimalzahlen. Verwenden parseInt, wenn, und nur wenn Sie sicher sind, dass Sie möchten, dass der integer-Wert.
Bitte siehe das folgende Beispiel.Es wird Ihnen helfen klar Ihre Zweifel
mithilfe parseint-Funktion wird Es nur geben, op integer Gegenwart und nicht die Zeichenfolge
wir können
+(stringOfNumber)
anstattparseInt(stringOfNumber)
Ex:
+("21")
returns int 21 wie dieparseInt("21")
.wir können diese unären " + " - operator für die Analyse Schwimmer...
+
?parseInt
ist. Eine gemeinsame Umsetzung istconst myNumber = +myNumberAsAString
die aussieht wie eine standard -+=
oder=+
Betreiber auf den ersten Blick. Auch Wenn falsch verwendet, könnte es führen, um die Verkettung von Fehlern. Diese Lösung basiert auf der Tatsache, dass 0 angenommen als die linke Seite, wenn keine Nummer vorhanden.Versuchen
str - 0
zu konvertierenstring
zunumber
.Hier sind zwei links zum vergleichen der Leistung von mehreren Möglichkeiten zum konvertieren von string zu int
https://jsperf.com/number-vs-parseint-vs-plus
http://phrogz.net/js/string_to_number.html
'1'
umgewandelt werden1
durchToNumber
, dann1 - 0
wäre1
Es gibt viele Möglichkeiten, in JavaScript zu konvertieren eine Zeichenfolge in eine Zahl mit dem Wert... Alles einfach und praktisch ist, wählen Sie den Weg, der für Sie arbeitet:
Auch alle Mathematik Betrieb wandelt Sie zur Nummer, zum Beispiel...
Mein lieber, Weg ist, mit
+
Zeichen, das ist der elegante Weg, um konvertieren von string zu Zahl in JavaScript.Meiner Meinung nach, keine Antwort deckt alle Sonderfälle wie analysieren Sie ein Schwimmer sollte zu einem Fehler führen.
parseInteger
, nichtparseNumber
. Ich denke, alle Lösungen ist ein workaround, da JS nicht unterstützt Ganzzahlen und Fließkommazahlen als getrennte Arten. Wir könnten wiedernull
stattNaN
, wenn Nicht Eine Zahl ist irreführend.Google gab mir diese Antwort als Ergebnis, so...
Ich tatsächlich benötigt, um "speichern", einen string, eine Ganzzahl, eine Bindung zwischen C und JavaScript, so dass ich konvertieren den string in einen integer-Wert:
int2str
Funktion wird beendet, wenn ein byte ist 0, die ein legitimes element der Wert, also dieif
...break
sollte entfernt werden, so erhalten Sie eine komplette 4-byte-Wert, der zurückgegeben wird.alle der oben genannten korrekt sind. Bitte achten Sie darauf vor, dass dies eine Zahl in einen string by doing "typeot x === 'number'" andere weisen es zurück NaN
var num1 = "12423"; typeof num1;
zurückstring
.Eine weitere option ist die Doppel-XOR den Wert mit sich selbst:
Dieser Ausgabe:
JS:
HTML:
Ich diese
diese Weise bekomme ich immer ein int zurück.
Ich nur Hinzugefügt, ein plus(+) vor dem string und das war die Lösung!
Hoffe es hilft 😉
Aus der Summe der Multiplikation der Ziffern mit Ihren jeweiligen power of zehn:
ich.e: 123 = 100+20+3 = 1*100 + 2+10 + 3*1 = 1*(10^2) + 2*(10^1) + 3*(10^0)
}
Hier ist die einfachste Lösung
Ist der sicherste Weg, um sicherzustellen, dass Sie eine gültige Ganzzahl:
Beispiele: