Wie konvertiere ich eine Fließkommazahl in JavaScript in eine ganze Zahl?
Ich umwandeln möchte einen float auf eine ganze Zahl, die in JavaScript. Eigentlich würde ich gerne wissen, wie zu tun, SOWOHL von der standard-Konvertierungen: von abschneiden und durch die Rundung. Und effizient, nicht über die Konvertierung in einen string-parsing.
Kommentar zu dem Problem
Wenn Sie nicht wissen, alle zahlen in javascript sind Fließkommazahlen. Aus der Spezifikation:
4.3.20 Anzahl Typ: Die Typ-Nummer ist eine Reihe von Werten, die zahlen. In ECMAScript, der Werte vertritt, die doubleprecision 64-bit format IEEE 754 Werte einschließlich der besonderen "not-a-Number" (NaN) - Werte positiv unendlich und negativ unendlich.
Ja, Javascript muss nicht ein deutliches "integer" - Typ, aber es ist immer noch nicht ungewöhnlich zu müssen, um diese Umwandlung zu tun. Zum Beispiel, in meiner Anwendung der Benutzer tippte eine Nummer ein (ggf. inklusive Cent). Ich hatte zum abschneiden der Cent und display w/ Kommas. Schritt 1 war, um zu konvertieren in int.
auch nützlich: speed-Vergleich aller Methoden jsperf.com/math-floor-vs-math-round-vs-parseint/33
@karl: Wenn ich mich annehmen von Eingaben in ein Feld, ich könnte in der Lage sein zu kontrollieren, was die Zeichen, die ich akzeptieren, aber ich könnte es alle Arten der Verarbeitung in Javascript, nicht nur die Annahme von Benutzereingaben. Selbst dann könnte ich wollen, dass es für Dinge wie die Unterstützung einfügen.
InformationsquelleAutor der Frage mcherm | 2009-02-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Math-Objekt-Referenz
Beispiele
Positive
Negative
Positiv - je Größer die zahlen
Negativ - Größere zahlen
InformationsquelleAutor der Antwort moonshadow
Bitweisen ODER-operator
Einer bitweisen oder-operator kann verwendet werden, um truncate floating point zahlen und es funktioniert für positive wie auch negative:
Ergebnisse
Performance-Vergleich?
Habe ich einen JSPerf-test, vergleicht die Leistung zwischen:
Math.floor(val)
val | 0
bitweise ODER~~val
bitweise NICHTparseInt(val)
das funktioniert nur mit positiven zahlen. In diesem Fall sind Sie sicher zu verwenden bitweise Operationen sowie
Math.floor
Funktion.Aber wenn Sie benötigen, Ihren code zu Arbeit mit positiven als auch negativen, dann wird eine bitweise operation ist der Schnellste (ODER bevorzugte). Diese anderen JSPerf-test vergleicht die gleiche, wo ist es ziemlich offensichtlich, dass Sie aufgrund der zusätzlichen Zeichen prüfen Mathe ist jetzt der langsamste der vier.
Hinweis
Wie gesagt in den Kommentaren, BITWEISE Operatoren arbeiten auf signed 32-bit Integer-zahlen, daher große zahlen umgewandelt werden, Beispiel:
InformationsquelleAutor der Antwort Robert Koritnik
Hinweis: Sie können
Math.floor()
als Ersatz für abschneiden, weilMath.floor(-3.1) = -4
und nicht-3
!!Einen richtigen Ersatz für abschneiden würde:
InformationsquelleAutor der Antwort
Doppel Bitweises nicht - operator kann verwendet werden zum abschneiden schwimmt. Die anderen Operationen, die Sie erwähnt sind erhältlich über
Math.Boden
,Math.ceil
, undMath.Runde
.Mehr details mit freundlicher Genehmigung von James Padolsey.
InformationsquelleAutor der Antwort brad
Für truncate:
Runde:
InformationsquelleAutor der Antwort Mike
Können Sie die parseInt - Methode für keine Rundung. Seien Sie vorsichtig mit der Benutzer-Eingabe durch die Zeichenfolge " 0x (hex) und 0 (oktal) Präfix-Optionen.
InformationsquelleAutor der Antwort Graeme Wicksted
Bit-Verschiebung von 0, was gleichbedeutend mit einer division durch 1
InformationsquelleAutor der Antwort Prasanth
In Ihrem Fall, wenn Sie möchten, eine Zeichenfolge in das Ende (in der Reihenfolge einfügen Kommas), Sie können auch verwenden Sie einfach die Anzahl.toFixed () - Funktion, diese wird jedoch führen Rundung.
InformationsquelleAutor der Antwort Russell Leggett
Gibt es viele Anregungen hier. Die bitweise ODER-Verknüpfung scheint die einfachste bei weitem. Hier ist eine kurze Lösung, die funktioniert mit negativen zahlen sowie die Verwendung der modulo-operator. Es ist wahrscheinlich einfacher zu verstehen als das bitweise ODER:
Diese Methode funktioniert auch mit dem hohen Wert zahlen, wenn weder '|0' noch '~~' noch '>>0' korrekt:
InformationsquelleAutor der Antwort Juliane Holzt
Eine weitere Möglichkeit — verwenden Sie XOR-operation:
Priorität der bitweisen Operationen ist geringer als die Priorität der mathematischen Operationen, ist es nützlich. Versuchen Sie, auf https://jsfiddle.net/au51uj3r/
InformationsquelleAutor der Antwort Dmitry Kharitonov
Zu abschneiden:
Zu Runde:
InformationsquelleAutor der Antwort Razor
Wenn Sie mit angularjs dann einfache Lösung wie folgt In HTML-Template-Bindung
{{val | number:0}}
wird es konvertiert val in integer
gehen Sie durch mit diesem link docs.angularjs.org/api/ng/filter/number
InformationsquelleAutor der Antwort Jameel Grand
Ich möchte nur darauf hinweisen, dass monetär aus, die Sie abrunden möchten, und nicht kürzen. Wird ein penny ist viel weniger wahrscheinlich, da 4.999452 * 100 gerundet wird Ihnen 5, eine weitere repräsentative Antwort.
Obendrein, vergessen Sie nicht über banker ' s rounding, das ist ein Weg, um gegen die leicht positive Vorspannung, dass gerade Rundung gibt-Ihren finanziellen Einsatz erfordern.
Gauß/banker ' s rounding in JavaScript
InformationsquelleAutor der Antwort Gerard ONeill