Die JavaScript-Funktion parseInt
kann verwendet werden, um die Umwandlung eines gegebenen Parameters in eine Ganzzahl zu erzwingen, unabhängig davon, ob dieser Parameter eine Zeichenfolge, eine Gleitkommazahl, eine Zahl usw. ist.
In JavaScript würde parseInt(1.2)
1
ohne Fehler liefern, in TypeScript hingegen wird beim Kompilieren ein Fehler ausgegeben:
Fehle ich hier etwas oder ist es ein erwartetes Verhalten von TypeScript?
Verwenden Sie nicht parseInt
, um diese Operation auszuführen - verwenden Sie Math.floor
.
Mit parseInt
bis floor
wird eine Zahl nicht immer zu korrekten Ergebnissen führen. parseInt(4e21)
gibt 4
, nicht 4e21
zurück. parseInt(-0)
gibt 0
zurück, nicht -0
.
Die Funktion parseInt
erwartet in der Tat ein string
in ihrem ersten Argument. Überprüfen Sie die Dokumentation . Normalerweise können Sie das zweite Argument radix
weglassen und dann auf den Standardwert 10
zurückgreifen. Am sichersten ist es jedoch, die numerische Systembasis als zweites Argument hinzuzufügen (normalerweise 10
).
Wenn Sie einen allgemeinen Wert in number
umwandeln möchten, können Sie die Funktion Number
wie folgt verwenden.
Sieh dir die Eingabe an:
%Vor%Das erste Argument muss eine Zeichenfolge sein. Das entspricht der Spezifikation:
parseInt (string , radix)
Die FunktionparseInt
erzeugt einen ganzzahligen Wert, der durch die Interpretation des Inhalts des string -Arguments entsprechend dem angegebenen radix bestimmt wird.
In normalem JS wird das erste Argument basierend auf der folgenden Regel in der Spezifikation auf eine Zeichenfolge angewendet:
- Sei inputString ToString ( string ).
weshalb parseInt(1.2)
funktioniert.
Beachten Sie, dass die Spezifikation radix undefined
zulässt, was dem Auslassen entspricht, daher das Fragezeichen im radix?: number
-Teil der Signatur. In diesem Fall ist der Standardwert 10 (es sei denn, die Zeichenfolge sieht wie 0xabc
aus).
Wie in anderen Antworten erwähnt, ist parseInt
sowieso nicht die beste Lösung, wenn Sie wirklich eine Floor- oder Trunkierungsoperation durchführen möchten.
Warum würden Sie in diesem Fall parseInt verwenden? Verwenden Sie einfach Math.floor
oder Math.ceil
. parseInt
erwartet eine Zeichenfolge als Argument und nicht als Zahl. Daher dein Fehler
Ich denke, andere Leute haben hier bereits viele gültige Antworten gegeben, aber meiner Meinung nach wäre der einfachste Ansatz, .toString()
auf den ursprünglichen Wert zu beziehen, und den radix explizit anzugeben:
parseInt((1.2).toString(), 10);
Tags und Links javascript typescript