2017-09-15 3 views
-2

Ich bin mir sicher, dass es eine einfache Erklärung dafür gibt, aber ich habe viel zu viel Zeit damit verbracht. Ich dachte mir, dass jemand hier für einige Punkte schnell helfen könnte.Modulteilung in Java: Was mache ich falsch?

Das ist mein Problem:

var1 = 5000/3600; 

var2 = 5000 % 3600; 

System.out.println(var1); 

System.out.println(var2); 

Ausgang:

1.3888888 

1400.0 

Also, ich dachte, die "%" Symbole gibt den Rest? Wenn das der Fall ist, warum ist die Ausgabe in Zeile 2 1400.0 statt 3888888? Sagen wir, ich wechsle die Zahlen für 76/12 und 76% 12, dann bekomme ich 6 und 4, was richtig ist. Ich bin ratlos, und ich habe verschiedene Datentypen ausprobiert, aber nichts ändert sich (int, long, double, float). Ich habe einen anderen Weg gefunden, das Programm zu programmieren, aber an diesem Punkt bin ich nur neugierig auf was es könnte sein?

+8

Modulo '%' geben die Menge verbleibenden, nicht den Prozentsatz oder dezimal Fraktion. So geht 3600 nur einmal in 5000, und 1400 bleibt. 1400 ist .38, oder 38.888 ... Prozent oder 3600. – AntonH

+5

Sie haben ein falsches Verständnis davon, was ein [Rest] (https://www.mathsisfun.com/definitions/remainder.html) ist. – alfasin

+0

lol, ich dachte, dass es alles auf der rechten Seite der Dezimalstelle speichern sollte. Ich wusste, es war eine dumme Frage für alle. Nun, ich habe es jetzt. Danke Leute! – YumBerrys

Antwort

2

Der Operator% macht den Rest geben, und 5000, wenn sie von 3600 geteilt verbleibt ein Restbestand von 1400.

Ich glaube, Sie den Operator% erwar Sie die Bruchkomponente der Division als eine Zahl ausgedrückt geben zwischen 0 (inklusive) und 1 (exklusiv), was nicht passiert. Wenn Sie diesen Wert erhalten möchten, aber es ist nicht zu viel Arbeit: nur das Ergebnis der mod dividieren durch die Anzahl Sie geteilt durch:

double fracRemainder = (5000.0 % 3600.0)/3600.0; 
+1

Danke Mann, das war, was ich dumm dachte. Danke, dass du es für mich erledigt hast. – YumBerrys