TypeScript: Fehler bei der Verwendung von parseInt () für eine Zahl

8

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:

%Vor%

Fehle ich hier etwas oder ist es ein erwartetes Verhalten von TypeScript?

    
benjaminz 13.09.2016, 16:47
quelle

6 Antworten

12

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 .

    
Ryan Cavanaugh 13.09.2016, 17:10
quelle
4

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.

%Vor%     
Zoltán Tamási 13.09.2016 16:59
quelle
2

Sieh dir die Eingabe an:

%Vor%

Das erste Argument muss eine Zeichenfolge sein. Das entspricht der Spezifikation:

  

parseInt (string , radix)
      Die Funktion parseInt 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:

  
  1. Sei inputString ToString ( string ).
  2.   

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.

    
user663031 13.09.2016 17:12
quelle
2

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

    
Nahush Farkande 14.09.2016 04:36
quelle
1

Es gibt verschiedene Erscheinungsformen bei negativen Zahlen zwischen 'Math.floor' und 'parseInt'.

solltest du das benutzen: 1.2 | 0

oder (1.2) .toFixed (0)

    
Kinnicore 12.02.2018 03:17
quelle
0

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);

    
Giorgio Tempesta 13.03.2018 14:15
quelle

Tags und Links