ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
846
846
EMPFEHLEN
-
26.02.11 08:53 #1
- Registriert seit
- Feb 2008
- Beiträge
- 16
Hallo!
Also ich würde gerne einen float in einen String konvertieren nach einer Rechenoperation. Wichtig dabei ist, dass ich keine Nachkommastellen verliere.
Jetzt kann es vorkommen, dass ich nach der Rechenoperation beispielsweise eine Zahl bekomme, die aber aufgerundet gehört, zb. 32.823999999, weil das korrekte Ergebnis eben 32.824 wäre.
Mit dem DecimalFormatter kann ich wohl nicht arbeiten, da ich eben nie wissen kann, wieviele Nachkommastellen das Ergebnis haben wird.
DecimalFormat formatter = new DecimalFormat("0.000");
String str = formatter.format(fltValue);
Bei einem dirty cast, werden zwar alle Nachkommastellen korrekt übernommen, aber nur, wenn obiges Beispiel kein Ergebnis mit nachfolgenden 9ern liefert, die eigentlich aufgerundet gehören.
String str = Float.toString(fltValue);
Für Ideen und Tipps bin ich dankbar!
LG
-
26.02.11 15:17 #2
- Registriert seit
- Oct 2007
- Beiträge
- 19
Wie wär's wenn du dir eine Methode schreibst, die einfach prüft, ob gerundet werden muss oder nicht und wenn gerundet werden muss, dann lässt du runden und ansonsten halt nicht

Einfach den Float in einen String casten - würd es ganz simptel mit:
float f = 999.9f;
String = ""+f;
machen. Dann den String in ein CharArray packen (toCharArray()), das Array rückwärts durchlaufen lassen und prüfen, habe ich an den ersten Stellen (von hinten gelesen) nur 9er, dann den Float runden (man kann ja jetzt auch bestimmen auf wieviel Stellen gerundet werden soll) und wieder wie oben gezeigt, auf einen Strng casten, sonst gleich casten.
Gruß
-
-
26.02.11 21:38 #4
- Registriert seit
- Feb 2008
- Beiträge
- 16
Für alle die dieses Problem haben, hier die Lösung:
Bei double und float passieren Rundungsfehler. Das Problem ist ein Problem der Prozessor aArchitektur, soweit ich weiß. Bestimmte Zahlen können nicht genau dargestellt werden (werden ja nach IEEE Standard als Binärzahl gespeichert und behandelt).
Der Datentyp BigDecimal hilft.
http://www.i-coding.de/www/de/java/z...ble-float.html
Beispiel:
Beispiel:
0.217 - 0.211 = 0.006
double: 0.00599999725818634
float: 0.0059999973
Wichtig:
new BigDecimal("0.217").subtract(new BigDecimal("0.211")); // 0.006
new BigDecimal(0.217).subtract(new BigDecimal(0.211)); // 0.0060000000000000053290705182007513940334320068359375000
BigDecimal muss als String initialisiert werden und nicht als double, weil sonst wieder eine Initialisierung über Binärdarstellung geschieht und dann wieder diese Rundungsfehler auftreten.
-
Hi
Das ist vollkommen normal. Sowas passiert eben, wenn man eine Kommazahl mit bis zu unendlich viel Kommastellen in 32 Einser und Nuller packen probiert.
Solange es in einem bestimmten Zahlenbereich/Genauigkeitsbreich bleibt, hilft auch einfach sowas:
zB Wenn man auf 3 Kommastellen runden will:
Code java:1 2 3
float f=...; long l=(long)(f*1000); f=((float)l)/1000;
Gruß
-
27.02.11 19:00 #6
- Registriert seit
- Feb 2008
- Beiträge
- 16
Ich will nicht runden, ich will ein genaues Ergebnis und da ist nunmal BigDecimal die einzige Lösung.
-
Hallo,
auch wenn das Thema eigentlich schon erledigt ist, möchte ich dennoch einen Verweis auf die hervorragende Seite http://www.floating-point-gui.de/ hier lassen.
Grüße,
Matthias„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
Ähnliche Themen
-
[ABAP] String in int casten?
Von Jantz im Forum Sonstige SprachenAntworten: 2Letzter Beitrag: 05.06.09, 11:45 -
int zu String casten
Von noel1982 im Forum VisualStudio & MFCAntworten: 3Letzter Beitrag: 23.06.05, 13:26 -
String in Datum casten
Von Shizzl_chrizzl im Forum JavaAntworten: 6Letzter Beitrag: 24.11.04, 13:27 -
Convert CString Typ -> int,Float und int,float -> String
Von Indian im Forum C/C++Antworten: 3Letzter Beitrag: 19.11.04, 09:40 -
casten from string to list
Von yidaki im Forum JavaAntworten: 7Letzter Beitrag: 16.07.04, 14:00





Zitieren



Login





