Double / Double - Rechenproblem

jeipack

Erfahrenes Mitglied
Folgendes erbigt bei mir 0.0

new Double(anzahl/new Integer(SumAnzahl).doubleValue())

anzahl ist vom Typ Double und beinhaltet den Wert 1.0
SumAnzahl ist vom Typ int und beinhaltet den Wert 100

Eigentlich müsste das doch 0.01 ergeben?

Kann mir wer sagen was ich hierbei falsch mache

Vielen Dank
grüsse
jeipack
 
Hi!
Ja, es müsste 0.01 ergeben, und das tut es auch;)
Kannst du evtl. bissl mehr von deinem Quellcode posten? Was genau hast du vor?
Wie gesagt, so wie du das hier machst, funktioniert das - auch wenn's etwas umständlich gemacht ist.
 
Hast du mal überprüft ob wirklich diese Werte in den Variablen stehen? Hab diese Zeile mal ausprobiert und die Zahlen direkt reingeschrieben und es hat funktioniert.
 
So ich hoffe ihr habt alle gut gespeist? =)
Ja.. ich fühle mich echt schon richtig blöde.
So nun bin ich gerade im Debugger:
anzahl.doubleValue() = 1.0
new Integer(SumAnzahl).doubleValue() = 100.0
new Double(anzahl/new Integer(SumAnzahl).doubleValue())*100. = 0.0

Schlussendlich will ich den prozentualen Anteil von anzahl gegenüber SumAnzahl auf zwei Stellen gerundet.

Hier der Code. Ich hoffe ihr könnt meinen Fehler aufdecken, micht nervt das nämlich schon total.

Code:
                //Summe von Anzahl rausfinden
                int SumAnzahl=0;   
                for(int i =0; i<inspBeanLaengenverteilung.size();i++) {
                    SumAnzahl += ((BeanStatsLaengenverteilung)inspBeanLaengenverteilung.get(i)).getAnzahl();
                }

                //Prozentzahlen setzen (werden hier drin gesetzt, damit die Summe aller 100% entspricht)
                prozentTot=0.;
                for(int i=0;i+1<inspBeanLaengenverteilung.size();i++) {
                    Double anzahl = ((BeanStatsLaengenverteilung)inspBeanLaengenverteilung.get(i)).getAnzahl().doubleValue();
                                        
                    Double prozent = Math.round(new Double(anzahl/new Integer(SumAnzahl).doubleValue())*100.)/100.;
                    prozentTot+=prozent;
                    ((BeanStatsLaengenverteilung)inspBeanLaengenverteilung.get(i)).setProz(prozent);
                }
                ((BeanStatsLaengenverteilung)inspBeanLaengenverteilung.get(inspBeanLaengenverteilung.size()-1)).setProz(100-prozentTot);


PS: dieses inspBeanLaengenverteilung ist ein Vector der Beans enthällt.
PPS: ja ich weiss die letze Prozentzahl wird noch nicht gerundet.
 
Ähm jetzt fühl ich mich gleich doppelt verarscht.
prozent wird nun zu 0.01.
Im Debugger(JBuilder 2006) ergibt new Double(anzahl/new Integer(SumAnzahl).doubleValue())*100. aber immer noch 0.0

Das Problem ist somit eigentlich erledigt, aber wieso zeigt mir der Debugger dieses 0.0 an?

Grüsse und vielen Dank :)
 
Zuletzt bearbeitet:
Warum denn das ganze new?

Geht doch auch so:
Java:
double result =anzahl/(double)sumAnzahl;

Achja und Math.round(double) gibt einen int zurück. Für 0.001 also 0.
 
Zuletzt bearbeitet:
Warum denn das ganze new?

Geht doch auch so:
Java:
double result =anzahl/(double)sumAnzahl;
Mhh ihrgendwie arbeite ich bei Doubles immer mit dem Object und nicht mit dem einfachen Datentyp (wie heissen die schon wieder? also int, doube, etc )
Achja und Math.round(double) gibt einen int zurück. Für 0.001 also 0.
nicht ganz, da kommt ein long zurück.

Ich bin noch Anfänger bis vielleicht Amateur was Java angeht, deshalb verzeit mir mein Code, bin aber für Verbesserungen jederzeit offen :)
 
Ich würde dir empfehlen primitive zu benutzen. Auf denen ist der Speicherzugriff schneller als auf Objekten und man kann sie mit == vergleichen. Mit new immer neuen speicher anzulegen ist sowieso nicht sinnvoll (Besonders bei Strings beachten, da ist es eigentlich immer unsinnig).
 
Zurück