En JavaScript wie bekomme ich:
- Wie oft geht eine bestimmte ganze Zahl in eine andere ein?
- Und der Rest?
En JavaScript wie bekomme ich:
Ich habe einige Geschwindigkeitstests mit Firefox durchgeführt.
-100/3 // -33.33..., 0.3663 millisec
Math.floor(-100/3) // -34, 0.5016 millisec
~~(-100/3) // -33, 0.3619 millisec
(-100/3>>0) // -33, 0.3632 millisec
(-100/3|0) // -33, 0.3856 millisec
(-100-(-100%3))/3 // -33, 0.3591 millisec
/* a=-100, b=3 */
a/b // -33.33..., 0.4863 millisec
Math.floor(a/b) // -34, 0.6019 millisec
~~(a/b) // -33, 0.5148 millisec
(a/b>>0) // -33, 0.5048 millisec
(a/b|0) // -33, 0.5078 millisec
(a-(a%b))/b // -33, 0.6649 millisec
Die obigen Angaben beruhen auf jeweils 10 Millionen Versuchen.
Schlussfolgerung: Verwenden Sie (a/b>>0)
(oder (~~(a/b))
o (a/b|0)
), um eine Effizienzsteigerung von etwa 20 % zu erreichen. Denken Sie auch daran, dass sie alle nicht mit Math.floor
wenn a/b<0 && a%b!=0
.
ES6 führt die neue Math.trunc
Methode. Dies ermöglicht die Festlegung @MarkElliot's Antwort damit es auch für negative Zahlen funktioniert:
var div = Math.trunc(y/x);
var rem = y % x;
Beachten Sie, dass Math
Methoden haben gegenüber bitweisen Operatoren den Vorteil, dass sie mit Zahlen über 2 arbeiten 31 .
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.