Klassen BigDecimal Multiplikation liefert nicht erwarteten Wert

Joker4632

Mitglied
Hallo,
kann mir jemand erklären warum bei der Multiplikation von zwei BigDecimal (mit den Werten 2,1 und 10000) nicht 21000 sondern 21000.000000000000888178419700125232338905334472656250000 rauskommt?
Java:
import java.math.BigDecimal;

public class Test {
    public static void main(String[] args){
        BigDecimal value1 = new BigDecimal(2.1);
        BigDecimal value2 = new BigDecimal(10000.0);
       
        BigDecimal result = value1.multiply(value2);
        System.out.println(result);
    }
}
 

MBadzura

Mitglied
Du musst den Double-Wert als String übergeben, dann bekommst dass richtige Ergebnis.
Java:
        BigDecimal d = new BigDecimal(Double.toString(2.1));
        BigDecimal e = new BigDecimal(Double.toString(10000.0));

Mit BigDecimal kannste genauer rechnen, du übergibst aber einen DoubleWert, welcher eben nicht so genau ist wie BigDecimal. Daher kommen die Abweichungen (grob gesagt).
 

Joker4632

Mitglied
Und wenn der eigentliche Wert größer ist als ein Double? Hier hab ich jetzt mal kleine Werte genommen, aber es hat einen Grund warum ich BigDecimal nutze^^
Da es aber scheinbar nur Probleme gibt wenn ich tatsächlich Nachkommastellen habe ... hast du mir glaube ich aber trotzdem schon geholfen. Danke!
 

fhoffmann

Top Contributor
Bei größeren Werten kannst du die Zahl als String übergeben:
Java:
import java.math.BigDecimal;

public class Test {
     public static void main(String[] args){
         BigDecimal value1 = new BigDecimal("2.1");
         BigDecimal value2 = new BigDecimal("1000000000000000000000000.0");

         BigDecimal result = value1.multiply(value2);
         System.out.println(result);
     }
}
 

Flown

Administrator
Mitarbeiter
Manche Zahlen können nicht genau mit double dargestellt werden und deswegen hast du merkwürdige "Nachkommastellen". HIER mal der Hauptartikel: What Every Computer Scientist Should Know About Floating-Point Arithmetic
 

BadBat

Aktives Mitglied
Die Nachkomma stellen werden als 2^-n dargestellt kannst ja mal mit 0,8 durchrechnen da kommst in ne Endlosschleife dadurch läufst du irgendwann aus deinen wertebereich und es wird was weggelassen was zu krummen ergebnissen führt. Oder du lässt dein Pc mal 0.1 +0.7 rechnen.
Code:
System.out.println(0.1+0.7);
Ergebnis = 0.7999999999999999
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
D BigDecimal Ausgabe sehr lang. Java Basics - Anfänger-Themen 2
I BigDecimal und Berechnungen weiterhin mit + / - usw. Java Basics - Anfänger-Themen 11
B TableView: laufender Saldo mit BigDecimal? Java Basics - Anfänger-Themen 6
I BigDecimal als Parameter verwenden Java Basics - Anfänger-Themen 3
A Kaufmännisches Runden mit BigDecimal Java Basics - Anfänger-Themen 14
G Compiler-Fehler BigDecimal Java Basics - Anfänger-Themen 5
AssELAss Datentypen BigDecimal Vergleichen ob Ergebnis >= 200 Java Basics - Anfänger-Themen 5
AssELAss Über ein Objekt vom Typ BigDecimal iterieren Java Basics - Anfänger-Themen 6
I BigDecimal < 0 Java Basics - Anfänger-Themen 12
E BigDecimal PQ Formel Java Basics - Anfänger-Themen 16
H DecimalFormat mit BigDecimal? Java Basics - Anfänger-Themen 6
K Wurzelberechnung Newton BigDecimal Java Basics - Anfänger-Themen 2
W BigDecimal bei Rechnungen Java Basics - Anfänger-Themen 5
neurox BigDecimal setScale wird ignoriert Java Basics - Anfänger-Themen 2
N max(BigDecimal,BigDecimal) Java Basics - Anfänger-Themen 2
P Mit double und BigDecimal rechnen Java Basics - Anfänger-Themen 6
M JTable Spalte ist bigDecimal Java Basics - Anfänger-Themen 2
G BigDecimal -- exception Java Basics - Anfänger-Themen 3
G BigDecimal mit zwei Nachkommastellen darstellen Java Basics - Anfänger-Themen 2
H integer 2 bigdecimal ? Java Basics - Anfänger-Themen 2
A Problem mit BigDecimal? Java Basics - Anfänger-Themen 3
G sehr kleine Dezimalzahlen (BigDecimal) falsch angezeigt Java Basics - Anfänger-Themen 5
B BigDecimal Java Basics - Anfänger-Themen 6
B String to BigDecimal Java Basics - Anfänger-Themen 3
T Wissenschaftliche Notationen + BigDecimal Java Basics - Anfänger-Themen 5
T zwei BigDecimal vergleichen Java Basics - Anfänger-Themen 2
B Frage zu BigDecimal! dringend Java Basics - Anfänger-Themen 2
L Switch-Case Multiplikation wird nicht ausgegeben Java Basics - Anfänger-Themen 1
padde479 Array Multiplikation der ersten n Zahlen Java Basics - Anfänger-Themen 7
S Multiplikation von zwei Labels Java Basics - Anfänger-Themen 7
F Matrix Multiplikation Java Basics - Anfänger-Themen 3
G Java Bruchrechner Addition, Multiplikation... Java Basics - Anfänger-Themen 12
Z Matrix Klasse mit Mehrdimensionalen Array (Addition, Multiplikation, to String) Java Basics - Anfänger-Themen 57
O Erstes Programm: Matrizen Multiplikation Java Basics - Anfänger-Themen 10
H Variablen Multiplikation einer inkrementierten Variablen Java Basics - Anfänger-Themen 5
D Methoden Matrix Multiplikation Java Basics - Anfänger-Themen 27
J Funktionsaufrufe Multiplikation von Arrays Java Basics - Anfänger-Themen 3
TomatenBrot447 Adapter für eine optimierte Multiplikation Java Basics - Anfänger-Themen 5
U Ist diese Methode zur Matrix Vektor Multiplikation korrekt ? Java Basics - Anfänger-Themen 5
K Multiplikation zweier Matrizen Java Basics - Anfänger-Themen 23
P Variablen Negatives Ergebnis bei Multiplikation von großen Zahlen Java Basics - Anfänger-Themen 2
R Matrix-Vektor-Multiplikation Java Basics - Anfänger-Themen 13
K Seltsames Ergebnis in Netbeans bei einfacher Multiplikation Java Basics - Anfänger-Themen 5
T Operatoren Multiplikation nur mit Addition, Subtraktion und Vergleich Java Basics - Anfänger-Themen 29
S Multiplikation durch Addition, Subtraktion und Vergleich von Zahlen Java Basics - Anfänger-Themen 14
V Vor jeder Multiplikation den linken Multiplikator abrunden Java Basics - Anfänger-Themen 4
M Matrix Matrix Multiplikation Java Basics - Anfänger-Themen 6
W Multiplikation mit rekursivem Aufruf Java Basics - Anfänger-Themen 17
S Multiplikation von großen Zahlen, ohne BigInt uä Java Basics - Anfänger-Themen 7
F.S.WhiTeY Multiplikation nach der Schulmethode Java Basics - Anfänger-Themen 6
K Matrizen Multiplikation Java Basics - Anfänger-Themen 3
B Multiplikation bei Generics Java Basics - Anfänger-Themen 9
G Multiplikation falsches Ergebnis Java Basics - Anfänger-Themen 5
K double Multiplikation Java Basics - Anfänger-Themen 2
K einfache Multiplikation Java Basics - Anfänger-Themen 6
2 Variablenüberlauf bei Addition, Multiplikation Java Basics - Anfänger-Themen 2
O Überlauf durch Multiplikation Java Basics - Anfänger-Themen 7
G Rekursive Methode liefert augenscheinlich keinen boolean-Wert zurück. Java Basics - Anfänger-Themen 4
JavaClap "Bruchrechner" liefert Fehler/keine Ausgabe bei Addition und Subtraktion Java Basics - Anfänger-Themen 0
B MySQL (jdbc) -> connection liefert NULL Java Basics - Anfänger-Themen 3
J HashSet Methode contains liefert false (hash Methode überschrieben) Java Basics - Anfänger-Themen 3
M Methoden while liefert nur den ersten Datensatz Java Basics - Anfänger-Themen 12
G Methode liefert "Min@15db9742" als Ausgabe Java Basics - Anfänger-Themen 2
J Kosinussatz liefert falschs Ergebnis Java Basics - Anfänger-Themen 2
J Berechnung liefert falsches Ergebnis Java Basics - Anfänger-Themen 2
E Methoden Methode liefert keinen Wert zurück Java Basics - Anfänger-Themen 16
Anfänger2011 file.isDirectory() liefert falschen Wert!? Java Basics - Anfänger-Themen 1
B Rechnung ohne Klammer liefert komisches Ergebniss Java Basics - Anfänger-Themen 3
D Operatoren IF Abfrage liefert falsches Ergebnis Java Basics - Anfänger-Themen 4
U ArrayList.get() liefert falsches Ergebnis Java Basics - Anfänger-Themen 4
L replaceAlll liefert Exception... Java Basics - Anfänger-Themen 3
M System.getProperty("java.vm.version") liefert build-Version Java Basics - Anfänger-Themen 4
R Hashset.add(Array) liefert immer true? Java Basics - Anfänger-Themen 23
F charAt-Methode liefert falsche Unicode-Werte Java Basics - Anfänger-Themen 8
P Map liefert bei put null als Ergebnis Java Basics - Anfänger-Themen 6
A contains bzw. indexOf liefert keine Treffer? Java Basics - Anfänger-Themen 3
M Problem mit getter, liefert nur alte Werte Java Basics - Anfänger-Themen 6
F arraylist.get() liefert Speicheradresse?!? Java Basics - Anfänger-Themen 2
R If-Abfrage liefert false zurück, wieso ? Java Basics - Anfänger-Themen 20
L Woerterbuch liefert immer "null" Java Basics - Anfänger-Themen 41
R warum liefert ein und dieselbe funktion nicht dasselbe return?? Java Basics - Anfänger-Themen 7
3 Collections containsKey() liefert false obwohl equals() true liefert Java Basics - Anfänger-Themen 6
M isHidden() von java.io.File liefert immer true in Windows Java Basics - Anfänger-Themen 3
B SQL Recortset liefert nur eine Zeile Java Basics - Anfänger-Themen 4
Raidri Pattern liefert false Java Basics - Anfänger-Themen 9
J Datentypen Textfield.getText() liefert keinen String Java Basics - Anfänger-Themen 4
C warum liefert equals kein TRUE Java Basics - Anfänger-Themen 12
Y System.console() liefert immer null zurück. Java Basics - Anfänger-Themen 6
X Datentypen Vergleichsmethode liefert immer null Java Basics - Anfänger-Themen 3
J Batch Datei liefert CLASS NOT FOUND Warum !? Java Basics - Anfänger-Themen 11
O Runden - x/100 liefert long zurück Java Basics - Anfänger-Themen 7
L Enumeration paramNames liefert Werte durcheinander Java Basics - Anfänger-Themen 13
S atan liefert falsches Ergebnis Java Basics - Anfänger-Themen 6
A JavaMail liefert Datenmüll Java Basics - Anfänger-Themen 5
C HashMap liefert HashMap zurück - incompatible types Java Basics - Anfänger-Themen 2
G static array liefert falsche Werte zurück Java Basics - Anfänger-Themen 2
H GPS über ser. Schnittst. liefert teilweise Sonderzeichen Java Basics - Anfänger-Themen 3
G Parser liefert StackOverflow error Java Basics - Anfänger-Themen 6
G Einfache Berechnung liefert falsches Ergebnis Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben