Rundungsproblem

Status
Nicht offen für weitere Antworten.

Randall

Bekanntes Mitglied
Hallo

Habe im Forum nichts darüber gefunden:

Ich habe in der Datenbank (MySql) einen falschen Datentyp für Geldbeträge genommen (float) ... habe ihn, nachdem Daten schon drin waren, auf double geändert.

Nun habe ich teilweise zu viele Dezimalstellen....

also aus 245.5

wurde

245.50193847457594 (Beispiel).



Ich müsste nun eine Methode programmieren, die mir all diese Beträge mit zuvielen Dezimalstellen raussucht. Wie stelle ich nun fest, ob eine Zahl mehr als 2 Dezimalstellen hat?

Und wie kann ich festellen, ob die zweite Dezimalstelle einer Zahl nicht 0 oder 5 ist ...

Gruss

André
 

SnooP

Top Contributor
ohne jetzt großartig über Double-Problematik i.A. nachgedacht zu haben... sowas?:
Code:
double x = 245.52193847457594;
int y = (int)(x * 100);
System.out.println(y);
double z = y / 100.0;
System.out.println(z);

allerdings ist das reines Abschneiden... zum Runden brauchst du noch die dritte Stelle und musst dann die zweite entsprechend ändern. Zum "holen" einer entsprechenden Stelle der Zahl musst du ebenfalls in einen Integer multiplizieren und dann mit %10, 100, 1000 etc. diejenige Stelle die du haben willst raussuchen.

Evtl. könnte dir aber auch DecimalFormat weiterhelfen...
 

Randall

Bekanntes Mitglied
Das Problem bei dieser Lösung ist, dass er nicht Rundet sondern einfach abschneidet.

Das Resultat wäre demnach bei dieser Lösung 245.52

ich brauche als Resultat aber 245.50 ... (bei Sfr. ist die kleinste Einheit 0.05 Fr.)....
 

SnooP

Top Contributor
wie gesagt - nutze modulo (%) um an einzelne Stellen zu kommen, die kannst du mit Math.round() runden... - das ganze ist eigentlich alles nur Mathe ;) - sollte machbar sein, oder?
 

LoN_Nemesis

Bekanntes Mitglied
Code:
double x = 245.52193847457594;
double y = Math.round(x * 10.0)/10.0;
System.out.println(y);

Rundet auf die erste Stelle nach dem Komma
 
S

SlaterB

Gast
zum Thema .00 oder .05, also 0 oder 5, also 00 oder 50:

entweder händisch (if >= 25 or < 75)
oder mit 2 multiplizieren, runden und wieder durch 2 teilen,
(+ jede Menge Verschiebungen des Kommas)

245.53 = 2455.3 -> 4910.6 ~ 4911 -> 2455.5 = 245.55
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben