Ich möchte in JavaScript einen Float in eine ganze Zahl umwandeln. Eigentlich würde ich gerne wissen, wie man BEIDE Standardkonvertierungen durchführt: durch Abschneiden und Runden. Und effizient, nicht über die Umwandlung in eine Zeichenfolge und Parsing.
Wie bereits in einer anderen Antwort erwähnt, kann eine negativ-sichere Trunkierung mit var intValue = ~~floatValue;
. Wenn die Notation für Ihren Geschmack zu obskur ist, verstecken Sie sie einfach in einer Funktion: function toInt(value) { return ~~value; }
. (Dies konvertiert auch Zeichenketten in Ganzzahlen, wenn Sie dies wünschen).
105 Stimmen
Wenn Sie es nicht wussten, sind alle Zahlen in Javascript Floats. Aus der Spezifikation:
8 Stimmen
4.3.20 Nummerntyp: Der Typ Number ist eine Menge von Werten, die Zahlen darstellen. In ECMAScript repräsentiert der Wertesatz die doppelpräzisen 64-Bit-Werte im IEEE-754-Format, einschließlich der speziellen "Not-a-Number"-Werte (NaN), positive Unendlichkeit und negative Unendlichkeit.
13 Stimmen
Ja, Javascript hat keine eindeutige "Integer"-Typ, aber es ist immer noch nicht ungewöhnlich, diese Konvertierung zu tun müssen. In meiner Anwendung gaben die Benutzer beispielsweise eine Zahl ein (möglicherweise einschließlich Cents). Ich musste die Cents abschneiden und mit Kommas anzeigen. Schritt 1 war die Konvertierung in int.
1 Stimmen
Auch nützlich: Geschwindigkeitsvergleich aller Methoden jsperf.com/math-floor-vs-math-round-vs-parseint/33
0 Stimmen
@mcherm warum nicht das Dezimalzeichen abfangen und seine Verwendung nicht zulassen? Wäre das nicht besser für den Benutzer? Wenn Ihr Code dem Benutzer nur die Eingabe von [0..9] erlaubt, müssen Sie außerdem nicht in eine Ganzzahl konvertieren. Trotzdem eine nützliche Frage.
1 Stimmen
@karl: Wenn ich Eingaben in ein Feld akzeptiere, kann ich vielleicht steuern, welche Zeichen ich akzeptiere, aber ich könnte alle möglichen Verarbeitungen in Javascript durchführen, nicht nur Benutzereingaben akzeptieren. Selbst dann könnte ich es für Dinge wie Unterstützung einfügen wollen.