float Berechnung: Ergebnis ohne wissenschaftliche Notation

holeai

Neues Mitglied
Hallo zusammen

Ich habe folgendes Problem und bis jetzt noch nirgends etwas gefunden, was wirklich funktioniert hätte.

Ich habe einen Beträge die ich mit einer Zinsrate multiplizieren möchte. Das ganze läuft in einer Schleife für mehre Beträge und Zinsraten ab. Bei den meisten funktioniert es auch ohne Probleme, aber bei zwei Beträgen erhalte ich als Ergebnis immer den Betrag als wissenschaftliche Notation:

als beispiel:

float ir = new Float(1.0015);
float amount = new Float(9987652);


float total = ir * amount;


Dabei kommt dann immer 1.0002634E7 raus...

wenn der Beträg z.b. 5648756 ist, funktioniert es noch korrekt.
Einige Beiträge dazu empfehlen Umwandlung in BigDecimal, aber dann verliere ich die Kommastellen. Ich weiss, dass Float sowieso ungenau ist, das spielt aber hier keine Rolle. Ich benötige einfach den Betrag auf zwei Kommastellen gerundet und brings irgendwie nicht hin.

Habt ihr eine Idee ?
 

httpdigest

Top Contributor
Beispiel basierend auf: https://stackoverflow.com/questions/5195837/format-float-to-n-decimal-places#answer-37878834
Java:
import java.math.*;
import java.text.*;
public class FloatFormat {
  public static void main(String[] args) {
    float v = 1.0002634E7f;
    NumberFormat f = NumberFormat.getInstance();
    /* Exakt zwei Nachkommastellen anzeigen */
    f.setMaximumFractionDigits(2);
    f.setMinimumFractionDigits(2);
    /* Und kaufmännisch runden */
    f.setRoundingMode(RoundingMode.HALF_UP);
    /* Willst du Tausendertrennzeichen? */
    f.setGroupingUsed(true);
    String str = f.format(v);
    System.out.println(str);
    // -> 10.002.634,00
  }
}
Bedenke, dass dein Problem nur die Formatierung von Fließkommawerten in eine Zeichenkette ist. Die Fließkommawerte selber sind einfach unformatierte IEEE-754 Werte an sich. Es kommt nur darauf an, wie du diese Werte als Strings formatierst/ausgibst. Wenn du aktuell z.B. einfach nur System.out.println(v); verwendet hast, legt Float.toString(v) intern fest, wie der Wert in eine Zeichenkette formatiert werden soll.
 

holeai

Neues Mitglied
Das Problem ist, dass dies die nachkommastellen abschneidet. .0000 etc.
88'660'144.000.
entweder funktioniert es nach dem Komma, oder vor, aber beides geht nicht
 

httpdigest

Top Contributor
Gib bitte ein MVCE für einen Fall, der nicht funktioniert. Wo wird was abgeschnitten? Wann wird was abgeschnitten? Das genannte Beispiel mit dem NumberFormat funktioniert definitiv.
 

httpdigest

Top Contributor
Okay, ich ahne schon, wo hier das Problem ist. Der Wert 88.660.144,230 (zum Beispiel) ist in IEEE-754 32-bit float nicht mehr repräsentierbar. Er benötigt einfach zu viele signifikante Stellen (in der Mantisse) und somit werden schon im Wert selber die niedrigstwertigen Stellen abgeschnitten/gerundet. Deshalb wird auch bei der Formatierung zum String aus ,230 dann ,000.
Deine erste Ausweichmöglichkeit wäre, double statt float zu nehmen. Hier kommst du dann bei ca. 15-16 signifikanten Stellen in Probleme.
Auf Nummer sicher gehst du, wenn du BigInteger (z.B. immer in Cents rechnen) oder BigDecimal für die ganze Arithmetik (und nicht nur für die finale Formatierung zum String) verwendest.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Arif Datentypen Float-Rundungsfehler Allgemeine Java-Themen 5
RalleYTN float in WORD konvertieren Allgemeine Java-Themen 1
N OctetString --> Float Allgemeine Java-Themen 5
P Wird double und float auf jedem Computer gleich berechnet? Allgemeine Java-Themen 10
J Datentypen String in Float umwandeln und "umbauen"? Allgemeine Java-Themen 5
M float, double, BigDecimal Allgemeine Java-Themen 5
S Variablen Prüfen ob Number vom Typ Integer, Float, Double, ... ist Allgemeine Java-Themen 2
N Variablen Gleitkommazahlen - Kleineres float? Allgemeine Java-Themen 11
P Datentypen float mit komma statt punkt möglich? Allgemeine Java-Themen 6
S Type mismatch: cannot convert from Object to float Allgemeine Java-Themen 3
B Variablen Bug of Float. & Double.MIN_VALUE! Allgemeine Java-Themen 4
Tobse 8 bit float Allgemeine Java-Themen 6
M FIFO Queue: bytes in, float/double/etc out Allgemeine Java-Themen 5
vandread Float/Double probleme bei der Multiplikation?! Allgemeine Java-Themen 3
F Float Division - Nachkommastelle bei 0 ausblenden Allgemeine Java-Themen 2
Developer_X "String" in "int" umwandeln, und dann "int" in "float" Allgemeine Java-Themen 8
G String nach Float parsen Allgemeine Java-Themen 2
E hex- Stirng in einen float umwandeln Allgemeine Java-Themen 9
MQue Float- Wert formatieren Allgemeine Java-Themen 8
E int vs. float vs. double Allgemeine Java-Themen 7
spacegaier Kommastellen aus float extrahieren Allgemeine Java-Themen 13
G WAV-Samples bearbeiten oder: 2 Bytes -> short -> float Allgemeine Java-Themen 5
J Float Formatierung? Allgemeine Java-Themen 6
P string zu float - darstellungsproblem Allgemeine Java-Themen 4
G Verständnisproblem double und float Allgemeine Java-Themen 7
W Division mit float und double Allgemeine Java-Themen 2
B Umwandeln von Bytes in float Zahl (DataInputStream) Allgemeine Java-Themen 3
W float/double verhält sich seltsam Allgemeine Java-Themen 6
R Float richtig in Integer ? Allgemeine Java-Themen 4
N Float zahl auf eine Stelle nach dem Komma runden Allgemeine Java-Themen 3
A Float-Wert auf 2 Stellen nach den Komma runden ? Allgemeine Java-Themen 2
H Multiplikation int*float Allgemeine Java-Themen 2
V Typumwandlung Integer, Float etc in String Allgemeine Java-Themen 4
S Rechnen mit float Zahlen Allgemeine Java-Themen 2
Zrebna Berechnung der Zeit funktioniert nicht wie erwartet: Date, GregorianCalendar Allgemeine Java-Themen 16
pkm Berechnung der Fakultät von Fließkommazahlen anhand von Stirlingformel Allgemeine Java-Themen 4
I Berechnung Lagerbestands / Verfügbarkeitsprüfung Allgemeine Java-Themen 1
L RegEx für Teile einer Berechnung Allgemeine Java-Themen 14
L Korrektur nach der Berechnung vornehmen, aber wie? Allgemeine Java-Themen 11
D Berechnung des Cosinus Allgemeine Java-Themen 4
A Fehlerhafte Nst Berechnung einer bestimmten Fkt. (Bisektion) Allgemeine Java-Themen 10
E Berechnung des Schnittpunktes von zwei Geraden Allgemeine Java-Themen 1
P Performate Zeiteiteiteilungs- Berechnung Allgemeine Java-Themen 4
B TileMap berechnung? Allgemeine Java-Themen 8
P jodaTime Berechnung Geburtstag Allgemeine Java-Themen 1
K Probleme bei Berechnung der Komplexität Allgemeine Java-Themen 7
S Welcher Schleifen type für eine Berechnung Allgemeine Java-Themen 7
B BlueJ Potenz Berechnung Allgemeine Java-Themen 16
W Berechnung Durchschnitt mit Schleife Allgemeine Java-Themen 9
M Berechnung verbessern Allgemeine Java-Themen 8
W OOP Berechnung des Skalarprodukts Allgemeine Java-Themen 9
H Demonstrationsprogramm zur CRC-Berechnung Allgemeine Java-Themen 2
D Berechnung von Sonnenauf und Sonnenuntergang Allgemeine Java-Themen 2
E Berechnung in Arraylist Allgemeine Java-Themen 10
R Eclipse Verschiedene Ergebnisse bei Berechnung eines double-Werts Allgemeine Java-Themen 5
E Falsche Ergebnisse bei PQ-Formel Berechnung Allgemeine Java-Themen 12
N Optimierung einer Berechnung Allgemeine Java-Themen 17
G java.sql Time Berechnung Allgemeine Java-Themen 6
Eldorado Berechnung von Koordinaten, die zufällig aussehen Allgemeine Java-Themen 5
B Berechnung eines sinh abbrechen, wenn 16. Nachkommastelle sich nicht mehr ändert Allgemeine Java-Themen 7
J Berechnung anhand einer XML-Datei Allgemeine Java-Themen 3
Private Void rekursive vs. iterative Lösung für Berechnung der Fakultät Allgemeine Java-Themen 12
S YUV to RGB (einfache Berechnung) Allgemeine Java-Themen 5
G Programm zur Berechnung von Summe, Median, Erwartungswert, usw von einem Array Allgemeine Java-Themen 7
C Bilder rotieren, Denkfehler in der Berechnung? Allgemeine Java-Themen 2
B Berechnung von Punkten/ If-else Strategie?! Allgemeine Java-Themen 51
T Berechnung in zweidimensionalem Array Allgemeine Java-Themen 3
X hashCode() Berechnung Allgemeine Java-Themen 5
R Tabelle - Berechnung der "Zeilenart" Allgemeine Java-Themen 2
L Berechnung mit Module bis bes.timme Zahl erreicht. Allgemeine Java-Themen 4
P CRC Berechnung Allgemeine Java-Themen 2
J berechnung von potenzen und wurzel-ziehen ohne klasse " Allgemeine Java-Themen 14
D Problem bei einer Berechnung (pow?) Allgemeine Java-Themen 3
P Java-Programm zur Berechnung globaler Minimas und Maximas-ff Allgemeine Java-Themen 4
B Primzahlen Berechnung optimieren Allgemeine Java-Themen 7
A Probleme bei der Berechnung von Pi! Java Problem Allgemeine Java-Themen 2
M Servlet --> Berechnung --> Timeout vom Proxy oder IE!? Allgemeine Java-Themen 7
W Variable Initialisierung mit dem Ergebnis einer Regex Allgemeine Java-Themen 1
OnDemand XML desializing Attribute bringt nicht erwartetes Ergebnis Allgemeine Java-Themen 16
N Wie kommt dieses Ergebnis zu stande Allgemeine Java-Themen 15
Y Falsches Ergebnis mit "/" Operator Allgemeine Java-Themen 2
S Seltsames Ergebnis mit Date-Klasse Allgemeine Java-Themen 6
M Falsches Ergebnis bei Rechnung Allgemeine Java-Themen 1
T If Vergleich ergibt nicht das richtige Ergebnis Allgemeine Java-Themen 2
J-Gallus Erste Schritte Wahrscheinlich Anfänger Fehler beim rechnen. Falsches Ergebnis. Allgemeine Java-Themen 9
Chr1s ergebnis = Zahl? Allgemeine Java-Themen 3
R Threads asynchrone Tätigkeit mit Ergebnis Auswertung Allgemeine Java-Themen 4
D Timestamp to Date, ergibt falsches ergebnis Allgemeine Java-Themen 5
Antoras Micro-benchmark für parallel vs. sequentiell erzeugt unerwartetes Ergebnis Allgemeine Java-Themen 8
S Ergebnis von Cursor c1 mit Cursor c2 vergleichen Allgemeine Java-Themen 3
M 2 Methoden, 2 Rückgabewerte, aber ein Ergebnis Allgemeine Java-Themen 7
N contains(.) liefert nicht erwartetes Ergebnis Allgemeine Java-Themen 3
M richtiges Ergebnis zählen und übergeben? Allgemeine Java-Themen 7
D Wann ist das ergebnis einer Rechnung eine Double? Allgemeine Java-Themen 7

Ähnliche Java Themen


Oben