___ qstnhdr ___ Lange Division in Java funktioniert nicht wie erwartet
___ antwort10103936 ___
casting (forcing) zu langen Arbeiten im Falle von Literalwerten für den rechten Operanden; Das Problem besteht jedoch weiterhin, wenn eine lange Variable einer anderen zugewiesen wird, wie im folgenden Beispiel:
%Vor%
Die einzige Möglichkeit, die richtige Antwort zu bekommen, besteht darin, die Division der Longs in Divisionen umzuwandeln. Es ist sehr merkwürdig, warum sich die Teilung der Sehnsüchte auf so mysteriöse Weise verhält.
longDivision liefert die Antwort als Null, während doubleDivision die richtige Antwort liefert.
Ich hoffe, dies hilft anderen, die ähnliche Probleme haben ...
Die lange %code% , die Sie erstellen, ist nicht der Wert, den Sie erwartet haben. Es liegt im ganzzahligen Bereich. Verwenden Sie zum Erstellen von Longs:
%Vor%
Das %code% , das Sie im ganzzahligen Bereich berechnet haben, war %code% . Dies ergibt sich aus %code% (= %code% ), ergibt %code% . Java schneidet den Dezimalteil ab, der die 5 verursacht.
Wenn Sie nach dem Zahlenliteral ein %code% hinzufügen, weisen Sie den Compiler an, es als %code% anstatt als %code% zu kompilieren. Der von Ihnen erwartete Wert für %code% ist %code% . Aber is wurde als int. Kompiliert.
Wir können den falschen Wert für %code% ( %code% ) reproduzieren, indem wir ihn auf ein int abschneiden:
%Vor%
%code% ist zu groß, um in ein %code% zu passen und überläuft.
___ tag123longinteger ___ Eine lange ganze Zahl ist eine ganze Zahl, normalerweise doppelt so groß wie eine normale ganze Zahl. Es wird in mehreren Programmiersprachen durch das Schlüsselwort 'long' repräsentiert.
___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen.
___ answer6766241 ___
Tricky eins!
Das Problem ist, dass 24, 60 und 1000 Java-Literal -Ints sind. Bevor die Werte x und y zugewiesen werden, werden sie abgeschnitten, um in int-Werte zu passen. Probieren Sie
aus
%Vor%
um genau zu sehen, was ich meine. Die schnelle Lösung besteht darin, Ihre Literale zu langen Werten zu machen:
%Vor%
%Vor%
obwohl die erwartete Antwort 1000 ist, aber der Javac gibt es als 5. Grund?
Der Ausdruck %code% ist ein %code% Typ nicht ein %code% Was Sie wollen ist %code% was ist %code%
Das hast du.
%Vor%
Was Sie wollen, ist
%Vor%