1561 Stimmen

Wie konvertiere ich in JavaScript eine Fließkommazahl in eine ganze Zahl?

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.

108 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.

42voto

Graeme Wicksted Punkte 1573

Sie können die parseInt Methode für keine Rundung. Seien Sie vorsichtig mit Benutzereingaben aufgrund der 0x (hex) und 0 (oktal) Präfixoptionen.

var intValue = parseInt(floatValue, 10);

EDIT: als Warnung (aus dem Kommentarbereich), beachten Sie bitte, dass bestimmte numerische Werte in ihre Exponentenform umgewandelt werden, z. B. 1e21 was zu einer falschen Dezimaldarstellung von "1"

1 Stimmen

Dies ist hilfreich, wenn Sie nur den ganzzahligen Teil einer Dezimalzahl benötigen, ohne auf- oder abzurunden, was .round, .ceil und .floor alle tun.

2 Stimmen

...selbst bei einfacher Trunkierung scheint dies die langsamste Methode zu sein. jsperf.com/float-to-int-umrechnung-vergleich

2 Stimmen

Übergeben Sie immer den zweiten Wert an parseInt, um anzugeben, welche Basis Sie erwarten. Also, parseInt(floatValue, 10), um immer die Basis 10 zu erhalten.

19voto

Prasanth Punkte 5079

Bitverschiebung um 0, was einer Division durch 1 entspricht

// >> or >>>
2.0 >> 0; // 2
2.0 >>> 0; // 2

4 Stimmen

Kleine Anmerkung: >> 0 scheint nur für ganze Zahlen < zu funktionieren 2^31-1 und >>> 0 für ganze Zahlen < 2^32-1 . Dies ergibt 0 für größere Werte

0 Stimmen

@RomualdBrunet, ja, JavaScript eindeutig definiert alle bitweise Operationen als Betrieb auf 32-Bit-Zahlen. Das steht in der Spezifikation.

0 Stimmen

Dies funktioniert, da Javascript bitweise Operationen nur mit 32bit (vorzeichenbehafteten) Ganzzahlen durchführt, wie in einer Antwort oben angegeben. Also jede Bit-Operation, die nichts zu tun scheint (wie ein Shift für 0, OR mit 0, AND mit 1, double NOT) noch braucht Javascript-Interpreter, um den Wert zu 32bit int konvertieren.

15voto

Russell Leggett Punkte 8485

In Ihrem Fall, wenn Sie eine Zeichenkette am Ende haben wollen (um Kommas einzufügen), können Sie auch einfach die Number.toFixed() Funktion, die jedoch eine Rundung vornimmt.

13voto

Dmitry Kharitonov Punkte 131

Eine weitere Möglichkeit ist die Verwendung der XOR-Operation:

console.log(12.3 ^ 0); // 12
console.log("12.3" ^ 0); // 12
console.log(1.2 + 1.3 ^ 0); // 2
console.log(1.2 + 1.3 * 2 ^ 0); // 3
console.log(-1.2 ^ 0); // -1
console.log(-1.2 + 1 ^ 0); // 0
console.log(-1.2 - 1.3 ^ 0); // -2

Die Priorität der bitweisen Operationen ist geringer als die Priorität der mathematischen Operationen, das ist nützlich. Versuch auf https://jsfiddle.net/au51uj3r/

10voto

Razor Punkte 22968

An abschneiden. :

// Math.trunc() is part of the ES6 spec
console.log(Math.trunc( 1.5 ));  // returns 1
console.log(Math.trunc( -1.5 )); // returns -1
// Math.floor( -1.5 ) would return -2, which is probably not what you wanted

An rund :

console.log(Math.round( 1.5 ));  // 2
console.log(Math.round( 1.49 )); // 1
console.log(Math.round( -1.6 )); // -2
console.log(Math.round( -1.3 )); // -1

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