Ich habe die Ergebnisse einer Division und möchte den Dezimalteil der resultierenden Zahl verwerfen.
Wie kann ich das machen?
quelle
Ich habe die Ergebnisse einer Division und möchte den Dezimalteil der resultierenden Zahl verwerfen.
Wie kann ich das machen?
Du könntest benutzen...
Math.trunc()
(Bruchteil abschneiden, siehe auch unten)Math.floor()
(abrunden)Math.ceil()
(zusammenfassen) Math.round()
(auf die nächste ganze Zahl runden)... abhängig davon, wie Sie die Dezimalstelle entfernen wollten.
Math.trunc()
wird noch nicht auf allen Plattformen unterstützt (nämlich IE), aber Sie können in der Zwischenzeit problemlos eine Polyfüllung verwenden .
Eine andere Methode zum Abschneiden des Bruchteils mit hervorragender Plattformunterstützung ist die Verwendung eines bitweisen Operators (.eg |0
). Der Nebeneffekt der Verwendung eines bitweisen Operators für eine Zahl besteht darin, dass der Operand als vorzeichenbehaftete 32-Bit-Ganzzahl behandelt wird, wodurch die gebrochene Komponente entfernt wird. Beachten Sie, dass dadurch auch Zahlen größer als 32 Bit entstellt werden.
Möglicherweise sprechen Sie auch über die Ungenauigkeit der Dezimalrundung mit Gleitkomma-Arithmetik.
Erforderliche Lektüre - Was jeder Informatiker über Gleitkomma-Arithmetik wissen sollte .
Math.floor()
wird erhöhen numerischen Wert , wenn Zahl negativ . AlsoMath.floor(-1.2) -> -2
währendMath.floor(1.2) -> 1
.parseInt(-1.2) -> -1
( Wie durch @FloydPink erwähnt ) wird Dezimalteil verwerfen , wie erwartet sowohl für positive und negative Zahlen.> (2.305*100)|0 > 230 > (2.3*100)|0 > 229
2.3*100
in Javascript ist229.99999999999997
, also scheint es , dass der bitweise Operator seine Arbeit in Ihrem Beispiel korrekt macht.|0
64-Bit-Ganzzahlen?Sie können auch bitweise Operatoren verwenden, um die Dezimalstelle abzuschneiden.
z.B
Bitweise Operationen sind wesentlich effizienter als die mathematischen Funktionen. Der doppelte nicht bitweise Operator scheint auch die
x | 0
undx << 0
bitweisen Operationen geringfügig zu übertreffen .Erwähnenswert ist auch, dass der bitweise Nicht-Operator Vorrang vor arithmetischen Operationen hat. Daher müssen Sie möglicherweise Berechnungen mit Klammern umgeben, um das gewünschte Ergebnis zu erzielen:
Weitere Informationen zum Operator double bitwise not finden Sie unter Double bitwise NOT (~~)
quelle
Sie könnten auch tun
quelle
parseInt
bei großen Zahlen nicht zuverlässig funktioniert, da zuerst das Argument in eine Zeichenfolge konvertiert wird und bei großen Zahlen das Ergebnis die Exponentialschreibweise verwendet. Zum Beispiel:var n = 22222222222222222222222; parseInt(n);
wird zurückgegeben2
, weiln.toString()
zurückgegeben wird2.2222222222222223e+22
.parseInt()
für seinen Zweck verwendet, nämlich eine Zahl in einer Zeichenfolge zu nehmen und a zurückzugebenNumber
.Sie können auch eine bestimmte Anzahl von Ziffern nach dem Dezimalpunkt (hier 2 Ziffern) mit folgendem Code anzeigen:
quelle
Verwenden Sie
Math.round()
Funktion.quelle
$.round = Math.round
;)Verwenden Sie
Math.round()
.(Alex 'Antwort ist besser; ich habe eine Annahme gemacht :)
quelle
Mit ES2015 ist Math.trunc () verfügbar.
Es wird in IE11 oder niedriger nicht unterstützt, funktioniert jedoch in Edge und jedem anderen modernen Browser.
quelle
Math.trunc(value * Math.pow(10,x)) / Math.pow(10,x)
das funktionieren würde?value = 2.3
undx = 2
wird zurückkehren2.29
. Ich habe keinen besseren Vorschlag.Wenn Sie sich nicht für das Rouding interessieren, konvertieren Sie einfach die Zahl in eine Zeichenfolge und entfernen Sie alles nach dem Punkt, einschließlich des Punkts. Dies funktioniert unabhängig davon, ob eine Dezimalstelle vorhanden ist oder nicht.
quelle
toFixed verhält sich wie rund.
Verwenden Sie für ein bodenähnliches Verhalten%:
quelle
Hier ist die komprimierende ausführliche Erklärung mit Hilfe der obigen Beiträge:
1. Math.trunc (): Hiermit werden die Ziffern entfernt, auf die ein Punkt folgt. Es konvertiert implizit. Wird im IE jedoch nicht unterstützt.
Beispiel:
Math.trunc (10.5) // 10
Math.trunc (-10,5) // -10
Andere alternative Möglichkeit: Verwendung des bitweisen Nicht-Operators:
Beispiel:
x = 5,5
~~ x // 5
2. Math.floor (): verwendet, um den minimalen möglichen ganzzahligen Wert anzugeben. Es wird in allen Browsern unterstützt.
Beispiel:
Math.floor (10.5) // 10
Math.floor (-10,5) // -11
3. Math.ceil (): verwendet, um den höchstmöglichen ganzzahligen Wert . Es wird in allen Browsern unterstützt.
Beispiel:
Math.ceil (10.5) // 11
Math.ceil (-10,5) // -10
4. Math.round (): Es wird auf die nächste Ganzzahl gerundet. Es wird in allen Browsern unterstützt.
Beispiel:
Math.round (10.5) // 11
Math.round (-10,5) // -10
Math.round (10.49) // 10
Math.round (-10,51) // -11
quelle
Verwenden Sie für eine ES6-Implementierung Folgendes:
quelle
Dies ist für diejenigen gedacht, die verhindern möchten, dass Benutzer Dezimalzahlen eingeben
quelle
Mit .toFixed (0) können Sie den vollständigen Dezimalteil entfernen oder die Zahl in Argumenten angeben, bis zu denen die Dezimalstelle abgeschnitten werden soll.
Hinweis: toFixed konvertiert die Zahl in eine Zeichenfolge.
quelle
Beispielsweise:
oder
quelle