508 Stimmen

Was ist der Unterschied zwischen parseInt() und Number()?

Wie werden parseInt() y Number() sich bei der Umwandlung von Zeichenketten in Zahlen unterschiedlich verhalten?

15voto

zangw Punkte 36978

Ich habe zwei Links gefunden, die einen Leistungsvergleich zwischen verschiedenen Konvertierungsmethoden ermöglichen string a int .

parseInt(str,10)    
parseFloat(str)
str << 0
+str
str*1 
str-0
Number(str)

http://jsben.ch/#/zGJHM

http://phrogz.net/js/string_to_number.html

8voto

Atishay Baid Punkte 331

parseInt() -> Analysiert eine Zahl in das angegebene Redix.

Number() -> Konvertiert den angegebenen Wert in sein numerisches Äquivalent oder in NaN, wenn dies nicht möglich ist.

Daher sollten wir für die Umwandlung eines nicht numerischen Wertes in eine Zahl immer die Funktion Number() verwenden.

z. B.

Number("")//0
parseInt("")//NaN

Number("123")//123
parseInt("123")//123

Number("123ac") //NaN,as it is a non numeric string
parsInt("123ac") //123,it parse decimal number outof string

Number(true)//1
parseInt(true) //NaN

Es gibt verschiedene Eckfälle zu parseInt() Funktionen, da sie eine Redix-Umwandlung vornimmt. Daher sollten wir es vermeiden, die Funktion parseInt() zum Zwecke der Umkehrung zu verwenden.

Um nun zu prüfen, ob der angegebene Wert numerisch ist oder nicht, sollten wir die native isNaN() Funktion

7voto

Ich verwende immer parseInt, aber achten Sie auf führende Nullen, die es in oktal Modus.

6voto

kagronick Punkte 2284

Es ist eine gute Idee, sich von parseInt fernzuhalten und Number und Math.round zu verwenden, es sei denn, Sie benötigen hexadezimale oder oktale Werte. Beide können Strings verwenden. Warum sollte man sich davon fernhalten?

parseInt(0.001, 10)
0

parseInt(-0.0000000001, 10)
-1

parseInt(0.0000000001, 10)
1

parseInt(4000000000000000000000, 10)
4

Sie schlachtet sehr große oder sehr kleine Zahlen völlig aus. Merkwürdigerweise funktioniert es normal, wenn diese Eingaben eine Zeichenkette sind.

parseInt("-0.0000000001", 10)
0

parseInt("0.0000000001", 10)
0

parseInt("4000000000000000000000", 10)
4e+21

Anstatt zu riskieren, dass schwer zu findende Bugs mit diesem und den anderen erwähnten Problemen auftreten, würde ich einfach vermeiden parseInt es sei denn, Sie müssen etwas anderes als die Basis 10 parsen. Number , Math.round , Math.floor y .toFixed(0) können alle die gleichen Dinge tun parseInt verwendet werden kann, ohne dass diese Art von Fehlern auftritt.

Wenn Sie parseInt wirklich für einige seiner anderen Eigenschaften verwenden wollen oder müssen, verwenden Sie es niemals, um Floats in Ints zu konvertieren.

0voto

Johan Rylander Punkte 35

ParseInt konvertiert in eine ganze Zahl, d.h. es werden keine Dezimalstellen entfernt. Number wird nicht in eine ganze Zahl umgewandelt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X