En JavaScript wie bekomme ich:
- Wie oft geht eine bestimmte ganze Zahl in eine andere ein?
- Und der Rest?
En JavaScript wie bekomme ich:
Sie können die Funktion parseInt
um ein abgeschnittenes Ergebnis zu erhalten.
parseInt(a/b)
Um einen Rest zu erhalten, verwenden Sie den Mod-Operator:
a%b
parseInt hat einige Tücken mit Strings, um zu vermeiden, verwenden Sie Radix-Parameter mit Basis 10
parseInt("09", 10)
In einigen Fällen kann die Zeichenkettendarstellung der Zahl eine wissenschaftliche Notation sein; in diesem Fall liefert parseInt ein falsches Ergebnis.
parseInt(100000000000000000000000000000000, 10) // 1e+32
Dieser Aufruf ergibt 1 als Ergebnis.
JavaScript berechnet die Untergrenze negativer Zahlen und den Rest von nicht-ganzzahligen Zahlen entsprechend den mathematischen Definitionen für diese Zahlen.
FLOOR ist definiert als "die größte ganze Zahl, die kleiner ist als der Parameter", also:
REMAINDER ist definiert als der "Rest" einer Division (euklidische Arithmetik). Wenn der Dividend keine ganze Zahl ist, ist auch der Quotient in der Regel keine ganze Zahl, d.h. es gibt keinen Rest, aber wenn der Quotient gezwungen wird, eine ganze Zahl zu sein (und das passiert, wenn jemand versucht, den Rest oder den Modulus einer Gleitkommazahl zu ermitteln), bleibt natürlich ein nicht ganzzahliger "Rest" übrig.
JavaScript berechnet alles wie erwartet, also muss der Programmierer darauf achten, die richtigen Fragen zu stellen (und die Leute sollten darauf achten, das zu beantworten, was gefragt wird!) Yarins erste Frage war NICHT "was ist die ganzzahlige Division von X durch Y", sondern stattdessen "die GANZE Anzahl von Malen, die eine gegebene ganze Zahl in eine andere eingeht". Für positive Zahlen ist die Antwort für beide gleich, aber nicht für negative Zahlen, weil die ganzzahlige Division (Dividende durch Divisor) um -1 kleiner ist als die Anzahl der Male, die eine Zahl (Divisor) in eine andere (Dividende) "hineingeht". Mit anderen Worten: FLOOR liefert die korrekte Antwort für eine ganzzahlige Division einer negativen Zahl, aber das hat Yarin nicht gefragt!
gammax hat richtig geantwortet, der Code funktioniert wie von Yarin gewünscht. Andererseits liegt Samuel falsch, er hat wohl nicht nachgerechnet, sonst hätte er gesehen, dass es funktioniert (außerdem hat er nicht gesagt, was der Divisor seines Beispiels war, aber ich hoffe, es war 3):
Rest = X % Y = -100 % 3 = -1
GoesInto = (X - Rest) / Y = (-100 - -1) / 3 = -99 / 3 = -33
Übrigens, ich habe den Code auf Firefox 27.0.1 getestet, es funktionierte wie erwartet, mit positiven und negativen Zahlen und auch mit nicht-ganzzahligen Werten, sowohl für Dividende und Divisor. Beispiel:
-100,34 / 3,57: GehtBis = -28, Rest = -0,3800000000000079
Ja, ich habe bemerkt, dass es dort ein Präzisionsproblem gibt, aber ich hatte keine Zeit, es zu überprüfen (ich weiß nicht, ob es ein Problem mit Firefox, Windows 7 oder mit der FPU meiner CPU ist). Für Yarins Frage, die nur ganze Zahlen betrifft, funktioniert der Code von gammax jedoch perfekt.
const idivmod = (a, b) => [a/b |0, a%b];
Es gibt auch einen Vorschlag, an dem gearbeitet wird. Modulus und zusätzliche ganzzahlige Mathematik
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.