Frage Wie konvertiere ich eine Zeichenfolge in JavaScript?


Wie konvertiere ich ein string In ein integer in JavaScript?


1372
2017-07-15 20:22


Ursprung


Antworten:


Der einfachste Weg wäre, das Native zu verwenden Number Funktion:

var x = Number("1000")

Wenn das für dich nicht funktioniert, dann gibt es die parseInt, unärer Plus, parseFloat mit Boden, und Math.round Methoden.

parseInt:

var x = parseInt("1000", 10); // you want to use radix 10
    // so you get a decimal number even with a leading 0 and an old browser ([IE8, Firefox 20, Chrome 22 and older][1])

unärer Plus Wenn Ihre Zeichenfolge bereits in Form einer Ganzzahl vorliegt:

var x = +"1000";

Wenn Ihre Zeichenfolge ein Float ist oder sein könnte und Sie eine ganze Zahl möchten:

var x = Math.floor("1000.01"); //floor automatically converts string to number

oder wenn Sie Math.floor mehrmals benutzen:

var floor = Math.floor;
var x = floor("1000.01");

Wenn Sie der Typ sind, der vergisst, das Radix beim Aufruf von parseInt zu setzen, können Sie parseFloat verwenden und es beliebig runden. Hier benutze ich Stock.

var floor = Math.floor;
var x = floor(parseFloat("1000.01"));

Interessanterweise macht Math.round (wie Math.floor) eine Umwandlung von Zeichenkette zu Zeichenkette, also wenn Sie die Zahl gerundet haben wollen (oder wenn Sie eine Ganzzahl in der Zeichenkette haben), ist das ein großartiger Weg, vielleicht mein Favorit:

var round = Math.round;
var x = round("1000"); //equivalent to round("1000",0)

1747
2017-07-15 20:28



Versuchen Sie die parseInt-Funktion:

var number = parseInt("10");

Aber es gibt ein Problem. Wenn Sie versuchen, "010" mit der Funktion parseInt zu konvertieren, erkennt es als Oktalzahl und gibt die Zahl 8 zurück. Sie müssen also eine Radix (von 2 bis 36) angeben. In diesem Fall Basis 10.

parseInt(string, radix)

Beispiel:

var result = parseInt("010", 10) == 10; // Returns true

var result = parseInt("010") == 10; // Returns false

192
2017-07-15 20:23



Es gibt zwei Möglichkeiten, eine Zeichenkette in JavaScript zu konvertieren. Eine Möglichkeit besteht darin, sie zu parsen, und die andere Möglichkeit besteht darin, ihren Typ in eine Zahl zu ändern. Alle Tricks in den anderen Antworten (z. B. unäres Plus) involvieren implizit den Typ des Strings zu einer Zahl. Sie können dasselbe auch explizit mit der Number-Funktion tun.

Parsing

var parsed = parseInt("97", 10);

parseInt und parseFloat sind die zwei Funktionen, die zum Analysieren von Zeichenfolgen in Zahlen verwendet werden. Der Parsingvorgang wird stumm beendet, wenn es auf ein Zeichen trifft, das nicht erkannt wird. Dies kann nützlich sein, um Strings wie "92px" zu analysieren, aber es ist auch etwas gefährlich, da es Ihnen keine Fehler bei der Eingabe gibt werde NaN zurückbekommen, wenn die Zeichenfolge nicht mit einer Nummer beginnt. Whitespace am Anfang der Zeichenfolge wird ignoriert. Hier ist ein Beispiel dafür, dass es etwas anderes macht als du willst und keinen Hinweis darauf gibt, dass etwas schief gelaufen ist:

var widgetsSold = parseInt("97,800", 10); // widgetsSold is now 97

Es empfiehlt sich, immer das Radix als zweites Argument anzugeben. Wenn in älteren Browsern die Zeichenfolge mit einer 0 begann, wurde sie als oktal interpretiert, wenn das Radix nicht angegeben wurde, was viele Leute überraschte. Das Verhalten für Hexadezimal wird ausgelöst, indem der String mit 0x beginnt, wenn kein Radix angegeben ist, z. 0xff. Der Standard hat sich tatsächlich mit ecmascript 5 geändert, so dass moderne Browser keine Oktale mehr auslösen, wenn es eine führende 0 gibt, wenn keine Radix angegeben wurde. parseInt versteht Radixes bis zur Basis 36, wobei sowohl Groß- als auch Kleinbuchstaben als gleichwertig behandelt werden.

Ändern des Typs einer Zeichenfolge in eine Zahl

Alle anderen oben erwähnten Tricks, die nicht parseInt verwenden, involvieren implizit den String in eine Zahl. Ich ziehe es vor, dies explizit zu tun,

var cast = Number("97");

Dies hat ein anderes Verhalten als die Parse-Methoden (obwohl Whitespaces immer noch ignoriert werden). Es ist strenger: wenn es die ganze Zeichenfolge nicht versteht, als es zurückgibt NaN, so dass Sie es nicht für Strings wie verwenden können 97px. Da Sie eine primitive Zahl anstelle eines Number-Wrapper-Objekts wünschen, stellen Sie sicher, dass Sie nicht setzen new vor der Nummernfunktion.

Offensichtlich erhalten Sie bei der Konvertierung in eine Zahl einen Wert, der eher eine Gleitzahl als eine Ganzzahl ist. Wenn Sie also eine ganze Zahl möchten, müssen Sie sie ändern. Dafür gibt es mehrere Möglichkeiten:

var rounded = Math.floor(Number("97.654"));  // other options are Math.ceil, Math.round
var fixed = Number("97.654").toFixed(0); // rounded rather than truncated
var bitwised = Number("97.654")|0;  // do not use for large numbers

Jeder bitweise Operator (hier habe ich ein bitweises oder, aber Sie könnten auch doppelte Negation tun, wie in einer früheren Antwort oder einem Bitshift) wird den Wert in eine 32-Bit-Integer konvertieren, und die meisten von ihnen werden in eine vorzeichenbehaftete Ganzzahl konvertiert. Beachten Sie, dass dies wird nicht wollen, dass Sie für große ganze Zahlen wollen. Wenn die ganze Zahl nicht in 32 Bits dargestellt werden kann, wird sie umgebrochen.

~~"3000000000.654" === -1294967296
// This is the same as
Number("3000000000.654")|0
"3000000000.654" >>> 0 === 3000000000 // unsigned right shift gives you an extra bit
"300000000000.654" >>> 0 === 3647256576 // but still fails with larger numbers

Um mit größeren Zahlen korrekt zu arbeiten, sollten Sie die Rundungsmethoden verwenden

Math.floor("3000000000.654") === 3000000000
// This is the same as
Math.floor(Number("3000000000.654"))

Bedenken Sie, dass all diese Methoden die Exponentialschreibweise verstehen 2e2 ist 200 anstatt NaN. Außerdem versteht Number "Infinity", während die Parse-Methoden dies nicht tun.

Brauch

Es ist unwahrscheinlich, dass eine dieser Methoden genau das tut, was Sie wollen. Zum Beispiel würde ich normalerweise einen Fehler auslösen wollen, wenn das Parsen fehlschlägt, und ich brauche keine Unterstützung für Infinity, Exponential oder führende Leerzeichen. Je nach Anwendungsfall ist es manchmal sinnvoll, eine benutzerdefinierte Konvertierungsfunktion zu schreiben.

Überprüfen Sie immer, ob die Ausgabe von Number oder einer der Parse-Methoden die erwartete Anzahl von Zahlen ist. Sie werden fast sicher verwenden wollen isNaN um sicherzustellen, dass die Nummer nicht NaN ist (normalerweise die einzige Möglichkeit, herauszufinden, dass das Parsen fehlgeschlagen ist).


107
2017-12-11 07:47



ParseInt () und + sind unterschiedlich

parseInt("10.3456") // returns 10

+"10.3456" // returns 10.3456

50
2018-03-14 09:54



Obwohl eine alte Frage, aber vielleicht kann dies für jemanden hilfreich sein.

Ich benutze diese Art der Umwandlung von String zu int Nummer

var str = "25";       // string
var number = str*1;   // number

Wenn Sie also mit 1 multiplizieren, ändert sich der Wert nicht, aber js gibt automatisch eine Zahl zurück.

Aber wie es unten gezeigt wird, sollte dies verwendet werden, wenn Sie sicher sind, dass die str ist eine Zahl (oder kann als Zahl dargestellt werden), andernfalls wird NaN zurückgegeben - keine Zahl.

Sie können eine einfache zu verwendende Funktion erstellen, z.

function toNumber(str) {
   return str*1;
}

enter image description here


35
2018-03-16 18:24



Versuchen Sie parseInt.

var number = parseInt("10", 10); //number will have value of 10.

31
2017-07-15 20:23



Ich habe hier die falsche Antwort geschrieben, sorry. Fest.

Das ist eine alte Frage, aber ich liebe diesen Trick:

~~"2.123"; //2
~~"5"; //5

Das doppelte bitweise Negativ löscht alles nach dem Dezimalpunkt UND konvertiert es in ein Zahlenformat. Mir wurde gesagt, dass es etwas schneller ist, als Funktionen anzurufen, aber ich bin nicht ganz davon überzeugt.

EDIT: Eine andere Methode, die ich gerade gesehen habe Hier (eine Frage über den JavaScript >>> Operator, der eine Null-Füll-Rechtsverschiebung ist), die zeigt, dass das Verschieben einer Zahl um 0 mit diesem Operator die Zahl in a umwandelt uint32 Das ist schön, wenn Sie es auch wollen ohne Vorzeichen. Auch dies wird in ein umgewandelt vorzeichenlose Ganzzahl, was zu merkwürdigen Verhaltensweisen führen kann, wenn Sie eine vorzeichenbehaftete Nummer verwenden.

"-2.123" >>> 0; // 4294967294
"2.123" >>> 0; // 2
"-5" >>> 0; // 4294967291
"5" >>> 0; // 5

25
2018-01-16 09:51



Vorsicht, wenn Sie mit parseInt einen Float in wissenschaftlicher Notation konvertieren! Beispielsweise:

parseInt("5.6e-14") 

wird darin enden, dass

5 

Anstatt von

0

18
2017-07-01 06:48