Double or Float zusammenrechnen

wer112

Top Contributor
Ich würde gerne Zahlen zusammenrechnen. Leider zeigt mir es komplett falsch an oder ein falsches Ergebniss.
Pro Diamant = 0,00001€
5 Diamanten = 0,00005€

Wie kann man maximal fünf Nach Kommazahlen zusammen rechnen?

Java:
double money = 0.00000;

                    for (int i = 0; i < diamond_menge; i++){
                        money =  money + 0.00001;
                    }
                    
                    betrag.setText(money + "€");


Da kommt aber das dabei raus: bei 2 Diamanten = 2.0E-5 € und bei 100 Diamanten = 0,001000000000000002€

Aber es soll bei 2 Diamanten = 0,00002€ rauskommen und bei 100 Diamenten = 0,001

Wie rechnet man das auf maximal 5 Stellen aus?
 

KonradN

Super-Moderator
Mitarbeiter
Damit hast Du die generelle Problematik bei Fließkommazahlen erkannt: Diese haben nur eine begrenzte Genauigkeit und Zahlen des dezimalen Systems lassen sich teilweise nicht im Dualen System mit endlichen Ziffern darstellen.

Da es Ungenauigkeiten gibt, kann es im Laufe von Berechnungen zu immer größeren Abweichungen kommen.

Mögliche Lösungen:
  • Datentypen verwenden, die genau sind. Bei Geld dann z.B. das Speichern der Cent oder der Typ BigDecimal oder so.
  • Man kann auch prinzipiell runden. Du kannst also den Wert auch auf 5 Stellen runden und dann erst anzeigen. Das kann bei der formatierten Anzeige auch schon ausreichen - wenn Du einfach einen String ausgibst, der dann genau 5 Nachkommastellen anzeigen soll. Also etwas wie: String.format("%,.5f", zahl)
 

wer112

Top Contributor
Damit hast Du die generelle Problematik bei Fließkommazahlen erkannt: Diese haben nur eine begrenzte Genauigkeit und Zahlen des dezimalen Systems lassen sich teilweise nicht im Dualen System mit endlichen Ziffern darstellen.

Da es Ungenauigkeiten gibt, kann es im Laufe von Berechnungen zu immer größeren Abweichungen kommen.

Mögliche Lösungen:
  • Datentypen verwenden, die genau sind. Bei Geld dann z.B. das Speichern der Cent oder der Typ BigDecimal oder so.
  • Man kann auch prinzipiell runden. Du kannst also den Wert auch auf 5 Stellen runden und dann erst anzeigen. Das kann bei der formatierten Anzeige auch schon ausreichen - wenn Du einfach einen String ausgibst, der dann genau 5 Nachkommastellen anzeigen soll. Also etwas wie: String.format("%,.5f", zahl)
Welcher Datentyp währe für 0,00001€ richtig? float oder double?
Weil ich bekomme da irgendwie 2.4E-4€ raus oder so, da kann kein normaler Mensch erkennen was das ist, soll trotzdem richtig Adiert werden.
 

wer112

Top Contributor
Double ist genauer als Float. Aber ungenau sind beide. 2.4E-4 ist einfach die Wissenschaftliche Notation: https://de.wikipedia.org/wiki/Wissenschaftliche_Notation - das ist das gleiche wie 0,00024. So was muss man entsprechend in der Ausgabe formatieren, wie @KonradN schon schrieb. Wenn es genau sein soll - BigDecimal verwenden. Das ist nur klobiger in der Benutzung.
Die App bricht dabei ab, wenn ich formetiere:

Java:
double money = 0.00000;

                    for (int i = 0; i < diamond_menge; i++){
                        money =  money + 0.00001;
                    }
                    String moneyString = String.format("%, .5", money);
                    
                    betrag.setText(moneyString + "€");
 

wer112

Top Contributor
java.util.UnknownFormatConversionException: Conversion = 'End of String'
at java.util.Formatter$FormatSpecifierParser.peek(Formatter.java:2642)
at java.util.Formatter$FormatSpecifierParser.<init>(Formatter.java:2619)
at java.util.Formatter.parse(Formatter.java:2558)
at java.util.Formatter.format(Formatter.java:2505)
at java.util.Formatter.format(Formatter.java:2459)
at java.lang.String.format(String.java:2870)
at com.andrealfredklug.bitcoinearn.Wallet$1.onResponse(Wallet.java:79)
at com.andrealfredklug.bitcoinearn.Wallet$1.onResponse(Wallet.java:62)
at com.android.volley.toolbox.JsonRequest.deliverResponse(JsonRequest.java:100)
at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:102)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8751)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
 

KonradN

Super-Moderator
Mitarbeiter
Oder um das Problem genau anzusprechen: Du hast in den Formatierungsstring ein Leerzeichen gepackt. Das darf da nicht sein. Und es fehlt das f am Ende.
 

KonradN

Super-Moderator
Mitarbeiter
Eine Seite, die das Formatieren von Strings erläutert, ist z.B.:
Strings richtig Formatieren und Ausgeben in Java | HelloCoding

Generell hast Du diverse % gefolgt von einem Zeichen. Das ist für diverse Typen. %f ist für floating numbers - also Gleitkommazahlen.
Mit einem . mit einer Zahl kann man die Anzahl der Nachkomma Zahlen festlegen. .5 bedeutet also, dass man 5 Stellen nach dem Komma haben will. (Das ist hier ein ., denn in der USA hat man halt ein Punkt statt dem Komma).

Und wenn man tausender-Trenner haben will (in der USA wäre das ein Komma, also z.B. 1,000,000 für eine Millionen), dann kann man in der Formatierung ein , setzen.

So kommt man dann zu %,.5f.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Fragen zu Ausgabe double und float Java Basics - Anfänger-Themen 3
K Erste Schritte switch - Warum sind long/float/double/... nicht erlaubt? Java Basics - Anfänger-Themen 5
G double in float umwandeln Java Basics - Anfänger-Themen 2
B Datentypen Test float und double speichern Zahlen nur ungefähr Java Basics - Anfänger-Themen 4
K Datentypen Wertebereich float/double - Warum nicht hoch -1 Java Basics - Anfänger-Themen 6
V Double schneller als Float? Java Basics - Anfänger-Themen 13
P Einem Double-Objekt einen float-Wert zuweisen Java Basics - Anfänger-Themen 2
O 64bit- OS byte, short, int oder long bzw. float oder double? Java Basics - Anfänger-Themen 13
M float/double Anzahl Nachkommastellen ermitteln Java Basics - Anfänger-Themen 18
M Float und double Java Basics - Anfänger-Themen 11
C Datentypen Float und Double Java Basics - Anfänger-Themen 2
F Array in double/float Java Basics - Anfänger-Themen 4
R switch erlaubt keine float/double-Rechnung Java Basics - Anfänger-Themen 5
W nach Eingabe prüfen: ob int, double,float,... Java Basics - Anfänger-Themen 3
I Review von euch erwünscht, double Rechnung falsch Java Basics - Anfänger-Themen 34
X wie bekomme ich durch Eingabeaufforderung definierte double in einen Befehl, welcher 3 erwartete double braucht? Java Basics - Anfänger-Themen 3
Avalon String in Double bzw. Währung konvertieren Java Basics - Anfänger-Themen 6
MoxMorris Integer.MAX_VALUE und Double.MAX_VALUE Unterschied Java Basics - Anfänger-Themen 3
krgewb Double mit zwei Nachkommastellen Java Basics - Anfänger-Themen 2
B Produkt eines double - streams Java Basics - Anfänger-Themen 3
Lion.King Fehler in double und int Java Basics - Anfänger-Themen 7
F java: incompatible types: possible lossy conversion from double to int Java Basics - Anfänger-Themen 1
J Double Variable und Addition Java Basics - Anfänger-Themen 2
F Double Ausgabe nicht wissenschaftlich Java Basics - Anfänger-Themen 16
Kotelettklopfer Variablen Double zwingen Ganzzahlen mit 2 Nachkommastellen auszugeben Java Basics - Anfänger-Themen 10
A possible lossy conversion from double to int Java Basics - Anfänger-Themen 5
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
L ArrayList<String> --> double[] array Java Basics - Anfänger-Themen 18
FelixN Array mit verschiedene Datentypen als Rückgabewert? (Long und Double) Java Basics - Anfänger-Themen 3
J Transformation zweier Integer in ein Double Java Basics - Anfänger-Themen 26
N The method setSaldo(double) in the type Konto is not applicable for the arguments (int, int) Java Basics - Anfänger-Themen 2
C Konvertierung des int typs in den double typ für die Ausgabe mit Nachkommastellen Java Basics - Anfänger-Themen 4
V Erste Schritte Die Nuller bei double NICHT abschneiden Java Basics - Anfänger-Themen 4
Y Datentypen Double Division ungenau Java Basics - Anfänger-Themen 45
L Datentypen Rechnen und abrunden mit double Java Basics - Anfänger-Themen 7
M Writer für unterschiedliche Obj/inbt/double erstellen? Java Basics - Anfänger-Themen 1
F Character umwandeln als Double Werte Java Basics - Anfänger-Themen 8
M Double Wert nach n abschneiden ohne zu runden Java Basics - Anfänger-Themen 1
D Methode mit Übergabe double und Rückgabe String Java Basics - Anfänger-Themen 2
P Hilfe bei Double Java Basics - Anfänger-Themen 1
B Rückgabe von zwei Werten: String und double Java Basics - Anfänger-Themen 14
B HQL / Hibernate, GroupBy und Ausgabe als Double Java Basics - Anfänger-Themen 1
M Konvertierung String -> double Java Basics - Anfänger-Themen 8
A Double Scan eingrenzen Java Basics - Anfänger-Themen 2
O Erste Schritte Potenzmethode per double Java Basics - Anfänger-Themen 11
A Random Double mit Math.round() runden? Java Basics - Anfänger-Themen 1
H Double oder nicht? Java Basics - Anfänger-Themen 7
J int array als double array ausgeben Java Basics - Anfänger-Themen 9
M Int und Double in Array speichern Java Basics - Anfänger-Themen 1
J String, Int und double Array sortieren Java Basics - Anfänger-Themen 16
B Hashing (verkettet/double) Java Basics - Anfänger-Themen 0
L Konvertieren von String zu double?! Java Basics - Anfänger-Themen 6
V Operatoren Warum kommt bei double bei den Nachkommastellen irgendwann eine 2?! (1.20000000000002) Java Basics - Anfänger-Themen 5
geekex Double zu String umwandeln in einer Methode Java Basics - Anfänger-Themen 28
E Bruch erstellen - Von Int zu Double Ergebnis Java Basics - Anfänger-Themen 24
G Probleme beim casten von double zu int Java Basics - Anfänger-Themen 3
I Double.ParseDouble 2 Textfelder Java Basics - Anfänger-Themen 1
M JComboBox feste double Werte zu ordnen Java Basics - Anfänger-Themen 8
P Datentypen Kann ich bei double Komma statt Punkt eingeben? Java Basics - Anfänger-Themen 14
E Von Double zu Long umwandeln Java Basics - Anfänger-Themen 9
L Bei falscher Eingabe soll NaN zurückgegeben werden, Rückgabetyp jedoch double Java Basics - Anfänger-Themen 3
V Variablen Double später deklarieren Java Basics - Anfänger-Themen 7
V double = 1.34823e-300 Java Basics - Anfänger-Themen 5
W double*double error Java Basics - Anfänger-Themen 4
kilopack15 Mehr Nachkommastellen mit double Java Basics - Anfänger-Themen 14
T Input/Output Double und String als Eingabe einlesen Java Basics - Anfänger-Themen 9
J [Rundungsfehler bei Double] Grundkurs Java: Checke Lösungsweg nicht Java Basics - Anfänger-Themen 1
W In einer Function<Double, Double> undefinierte Rechenoperationen abfangen? Java Basics - Anfänger-Themen 3
T set Metode für Double Java Basics - Anfänger-Themen 6
Hijo2006 String to Double Java Basics - Anfänger-Themen 4
K Double Wert runden und in Int umwandeln Java Basics - Anfänger-Themen 7
A Kommafehler beim double einleseen korrigieren Java Basics - Anfänger-Themen 2
K Operatoren The Operator * is undefined for the argument type(s) double, String Java Basics - Anfänger-Themen 4
das_leon String zu double konventieren Java Basics - Anfänger-Themen 1
K Genauer als Double? Java Basics - Anfänger-Themen 4
T Double.parseDouble(args[0]) Java Basics - Anfänger-Themen 13
A Java Ungenauigkeit double Java Basics - Anfänger-Themen 6
B Methoden The method mirror(double[]) in the type Convolution is not applicable for the arguments (double) Java Basics - Anfänger-Themen 8
C Typumwandlung von int<-->double Java Basics - Anfänger-Themen 6
M Double Wert auf 2 Kommastellen runden Java Basics - Anfänger-Themen 2
S Regelabfragen aus Double-Array Java Basics - Anfänger-Themen 2
A Erste Schritte Double Wert aus String zu int Java Basics - Anfänger-Themen 2
P Rückgabe erflogt nicht als Double Java Basics - Anfänger-Themen 2
P scanner ein Double einlesen Java Basics - Anfänger-Themen 10
T Java double berechnung fehler Java Basics - Anfänger-Themen 2
S double[x] , double[y] zu Point[] points kopieren? Java Basics - Anfänger-Themen 15
F double[] an andere Methode übergeben Java Basics - Anfänger-Themen 1
S Datentypen double - kommastellen abschneiden Java Basics - Anfänger-Themen 6
M int double int double Graph Java Basics - Anfänger-Themen 3
K ArrayList<Double> --> double[] array Java Basics - Anfänger-Themen 5
Z Double in komma und Punkt akzeptieren -> Robusteeingabe Java Basics - Anfänger-Themen 7
S Double und Gleitkommazahlen mit JUnit testen Java Basics - Anfänger-Themen 7
B Datentypen Multiplzieren mit double wird ungenau Java Basics - Anfänger-Themen 4
K Von einem Double wert nur die Zahl vor dem Komma verwenden Java Basics - Anfänger-Themen 9
F Double neu formatieren mit NumberFormat Java Basics - Anfänger-Themen 2
M Double-Ausgabe in JTextField fehlerhaft Java Basics - Anfänger-Themen 2
T Problem mit double-Formatierung Java Basics - Anfänger-Themen 3
M Double Zahl in Grad Zahl Java Basics - Anfänger-Themen 7
M Datentypen Ergebniss- Double to String- wird nicht angezeigt Java Basics - Anfänger-Themen 13
S Double mithilfe eines Scanners so einlesen, dass ich damit rechnen kann Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben