Double rundet falsch

5 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Versuch mal so:

double Test = 55/7.0; txt_Ausgabe.setText( Test );


servus1996 
Beitragsersteller
 30.05.2013, 14:41

Du hast recht so funktioniert es.

Aber angenommen ich bekomme immer eine andere int zahl übergeben, und von dieser möchte ich 70% haben.

Derzeit mache ich es so: int übergeben = "das was man eben bekommt";

double test = (übergeben*70/100); txt_Ausgabe.setText( Test ); auch hier rundet er bei der Ausgabe immer...

servus1996 
Beitragsersteller
 30.05.2013, 15:09
@Sauerlaender73

kannst du mir biiittee den code dazu aufschreiben? Ich habe leider keine Ahnung was casten eig. ist^^

Danke

Sauerlaender73  31.05.2013, 09:36
@servus1996

PerfectMuffin hat schon alles wichtige zu dem Thema geschrieben. Dem ist eigentlich nichts mehr hinzuzufügen.

Anfängerhilfe zum Thema Casten und Kommas:

Wenn man zwei Ganzzahltypen (short,int,long) teilt, erhält man immer nur Ganzzahlen, 3:2 ist also 1.

Um Kommazahlen zu verwenden muss einer der Operanden float oder double sein.

Deklaration von float: 123F das F setzt den Typ zu float.

Deklaration von double 123. oder 12.3 und so weiter, einfach einen Kommapunkt verwenden.

Man kann beliebig mit Klammern zwischen primitiven Datentypen casten

double d=(double)123;//123.0
d+=.5//123.5
int i=(int)d;//123

Du hast das Feld als Integer definiert


PerfectMuffin  30.05.2013, 16:39

Hier ist nichts als integer definiert.

PerfectMuffin  30.05.2013, 17:03
@alicia88

indem alles Ganzzahlen verwendet sind.

Kein Kommentar dazu.

Du verwendest "definieren" im falschen Kontext, Literale werden nicht definiert, sie sind Konstanten.

alicia88  30.05.2013, 18:41
@PerfectMuffin

Okay, du hast recht. Es ist halt eine Frage der Terminologie. Inhaltlich meinen wir dasselbe.

Wenn du einen double nach int castest (und das ist es, was du hier tust), wird immer abgerundet. Versuchs mal mit txt_Ausgabe.setText(Math.round(Test))

Oder ohne runden: txt_Ausgabe.setText(Test)+""


servus1996 
Beitragsersteller
 30.05.2013, 14:42

wo caste ich hier ein double nach int? wie kann ich das verhindern?

Metronom595  30.05.2013, 15:01
@servus1996

Hab mir den Code noch mal angeschaut, ich lag falsch. Ich hatte ausgehend von dem Fehler vermutet, dass die Textausgabe intern mit einem int arbeiten würde. Macht aber eigenrlich keinen Sinn.

Nein, der eigentliche Fehler liegt darin, dass bei der Division zweier Integer auch nur ein Integer herauskommt, im Zweifelsfalls also abgerundet wird, bevor das Ergebnis der double-Variable zugeordnet wird. Versuch mal Test = 55/7d.

Beim Dividieren in Java muss damit eine Kommazahl(float/double) rauskommt mindestens eine der Ausgangszahlen ebenfalls eine Kommazahl sein.