ERLEDIGT
NEIN
NEIN
ANTWORTEN
5
5
ZUGRIFFE
895
895
EMPFEHLEN
-
Hallo zusammen,
ich versuche derzeit eine relativ simple Rechenfunktion einzubauen.
Aber das Ergebnis ist katastrophal.
Beispiel:
Es soll einfach nur 5.6 mit 3 multipliziert werden.
Das sieht dann so aus:
ausgabe.setText(String.valueOf((5.6*3)));
Mit dem völlig falschen Ergebnis: 16.79999999 anstatt 16.8.
OK, ein Rundungsfehler, den ich mit:
x = Math.round( erg * 10.0 ) / 10.0;
beheben könnte. Aber es soll ja nicht immer gerundet werden!! Denn bei zB
5.7*3.1 bekomme ich das richtige Ergebnis von 17,67 mit 2 Nachkommastellen.
Wie kann ich es einrichten, dass nur gerundet wird, wenn das
Ergebnis nicht richtig ist. Kennt jemand eine passende Methode?
Vielen Dank
Duckemai
-
03.08.10 07:46 #2
- Registriert seit
- Apr 2009
- Ort
- Düsseldorf (NRW)
- Beiträge
- 498
Tja, das liegt leider an der Natur der Gleitkommazahlen, da kann man wenig gegen machen, wenn man keinen Vergleichswert hat. Du könntest dir höchstens mal die Klasse java.math.BigDecimal anschauen und gucken, ob du damit weiter kommst.
-
Danke,
aber mit BigDecimal klappt es auch nicht besser.
-
04.08.10 11:47 #4
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.724
- Blog-Einträge
- 29
Hallo,
Code java:1 2 3 4
double a = 5.6; double b = 3; double c = BigDecimal.valueOf(a).multiply(BigDecimal.valueOf(b)).doubleValue(); System.out.println(c);
Ausgabe:
ist schrecklich... ist aber so...Code :1
16.8
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Hallo,
das macht einen guten Eindruck.
Das Runden scheint mir bei diesen Funktionen aber etwas hackelig zu sein.
z.B: BigDecimal.valueOf(2).divide(BigDecimal.valueOf(3),RoundingMode).doubleValue()
Die Ausgabe 0.666666 fehlt mir da.
Ich habe es mit round() gelöst.
Danke
Duckemai
-
Probier es mal so:
Wenn du nur an einer Stringdarstellung des Ergebnisses interessiert bist, würde ich gleich wie oben toPlainString() o.ä. verwenden, anstatt erst in einen Double zu konvertieren.Code java:1 2 3
// Rundung auf 6 Nachkommastellen: String s = BigDecimal.valueOf(2).divide(BigDecimal.valueOf(3), 6, RoundingMode.DOWN).toPlainString(); System.out.println(s);
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
-
Rechnen
Von mckani im Forum PHPAntworten: 0Letzter Beitrag: 07.12.05, 18:08 -
Rechnen mit PHP
Von Camod im Forum PHPAntworten: 9Letzter Beitrag: 05.10.05, 20:46 -
Rechnen mit PHP
Von meilon im Forum PHPAntworten: 15Letzter Beitrag: 24.05.04, 22:19 -
+- Rechnen !
Von BigBruder im Forum JavaAntworten: 6Letzter Beitrag: 14.11.03, 22:31 -
Rechnen in SQL
Von kesnw im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 24.10.03, 15:26





Zitieren



Login




