Doppelter Wert negativ nach Multiplikation -Java

8

In meinem Code habe ich folgende Zeile.

%Vor%
  • Hier ist c12 doppelt und fileSize doppelt
  • c12 hat einen Wert von 1700 und
  • fileSize hat den Wert 1944038

aber nach der Multiplikation bekomme ich -990102696 .

Kann jemand mir dabei helfen? Sind einige Größenbeschränkungen falsch?

    
user750932 12.05.2011, 16:23
quelle

6 Antworten

4

Ihre c12 und fileSize sind höchstwahrscheinlich Intars (+1 Tomasz). Java multipliziert die ints, die überlaufen, werden negativ und speichern diesen negativen Wert in Ihrem double. Wirf c12 und fileSize, um zu verdoppeln, bevor du multiplizierst:

%Vor%

erzeugt:

%Vor%     
alpian 12.05.2011, 16:31
quelle
9

(int)1700 * (int)1944038 entspricht Ihrer -990102696 .

Sind Sie sicher, dass c12 und fileSize keine Ganzzahlen sind? Wenn dies der Fall ist, erfolgt die Multiplikation mit Integer-Typen, einem Integer-Überlauf, und sie wird nach% danach heraufgestuft.

    
Tomasz Nurkiewicz 12.05.2011 16:29
quelle
1

Hmm, das habe ich gerade ausprobiert und ich bekomme "3.3048646E9". Sie sollten keine Überlaufumhüllung auf einem Doppelpack erhalten: Wenn Sie das Maximum überschreiten, sollte es sich in "Unendlichkeit" verwandeln.

Ich vermute, dass das Problem in dem liegt, was Sie versuchen, diese Nummer zu schreiben. Oder vielleicht müssen Sie uns etwas mehr Code zeigen.

    
Jay 12.05.2011 16:38
quelle
0

Machen Sie ein Double on the Fly:

%Vor%

sonst wird ein c12 als int mit einem anderen int multipliziert, und das Ergebnis läuft über und wird später - zu spät - in double umgewandelt.

%Vor%

würde helfen, aber eine Dateigröße wie float / double sieht fischig aus.

    
user unknown 12.05.2011 16:31
quelle
0
%Vor%

Gibt 3.3048646E9

Ich wette, Ihr c12 und fileSize sind Ints.

    
Olaf 12.05.2011 16:32
quelle
-1

Verwenden Sie BigDecimal multiplizieren Methode statt wie folgt, um potentielle überhöhte Probleme beim Umgang mit großen doppelten Zahlen zu verhindern:

%Vor%     
anubhava 12.05.2011 16:29
quelle

Tags und Links