float/double verhält sich seltsam

  • Themenstarter Themenstarter waquner
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
W

waquner

Gast
hi guys!

ich hab ein kleines problem mit folgendem Code:

Code:
this.credit -= cans[selection].getCost();

this.credit ist ein float und cans[selection].getCost(); liefert auch einen float zurück
wenn jetzt aber beispielsweise this.credit=1.04 ist und getCost() 0.9 zurückliefert
hat this.credit nachher nicht den wert 1.04-0.9 = 0.14 sondern 0.13999999
bei doubles dasselbe nur mit mehr nachkommastellen

woran liegt das? muss ich jedesmal aufrunden?

danke und lg waquner
 
nein, du musst das nur für die Ausgabe runden (DecimalFormat)

die Zahl selbst kannst du nicht "runden", weil sich 0.14 im 2er System eben nicht darstellen lässt
 
Such mal im Forum nach "Fließkommazahlen" + evtl. Problem oder runden. Gabs schon seeeeeeeeeehr oft 😉
 
wow das geht aber schnell hier, dakönnen sich andre foren nur ein beispiel dran nehmen🙂

genug der schleimerei🙂
in meinem fall muss ich dann wohl doch jedes mal runden, weil er in einer schleife versucht bestimmte zahlen abzuziehen (es geht um geld, das kleinste ist also 0.01 = 1 cent) und da er bei =0 aufhören soll, macht er das nicht...
danke aufn jednfall!
 
Doch du kannst runden.

Code:
public class Rund {
	
	public static void main(String[] args) {
		
		double dbl = 0.13999999998;
		System.out.println((Math.round(dbl * 100D) / 100D));
	}
}
 
Wenn es sich um eine Währung handelt könntest Du auch evtl. die Beträge z.B. in 'Cent' speichern. Dann kannst du einen Integer-typ verwenden (int/long). Damit sparst Du Dir die Probleme mit Fließkommazahlen. Du musst dann die Daten nur zur Anzeige umformatieren... ( / 100 ).
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben