Kaufmännisches Runden mit BigDecimal

andrade

Mitglied
Hallo,
ich mach gerade zur Übung eine Aufgabe aus einem alten Skript und komme nicht weiter.
Die Methode public static BigDecimal prozent(BigDecimal betrag, BigDecimal prozentsatz)
soll den Wert (betrag/100)*prozentsatz berechnen.
Dabei soll mit kaufmännischer Rundung gerechnet werden. Die Genauigkeit (Anzahl der Dezimalstellen) soll über eine Klassenvariable gesteuert werden, die man über die Methode setDezimalstellen(…) setzen kann. Standardmäßig soll sie den Wert 5 haben.

Ich hab folgendes Template gegeben:
Java:
import java.math.BigDecimal;
public class Berechnung2 {
    /**
    * Diese Methode speichert die Anzahl der Nachkommastellen in einer Klassenvariable.
    */
    public static void setDezimalstellen(int dezimalstellen) {       
    }
    /**
    * Diese Methode berechnet einen Prozentwert unter Berücksichtigung der aktuell gültigen Nachkommastellenzahl.
    */
    public static BigDecimal prozent(BigDecimal betrag, BigDecimal prozentsatz) {
        return null;
    }
}
Da hab ich aber enorme Probleme mit dem Aufruf von BigDecimal prozent(BigDecimal betrag, BigDecimal prozentsatz), was muss ich da genau für Werte eingeben?
Ich hab einmal zum Test, die folgende Klasse geschrieben, die so zu funktionieren scheint:
Java:
import java.math.BigDecimal;
public class BechnungTest
{
    public static BigDecimal prozent() {
        BigDecimal HUNDERT = new BigDecimal(100);
        BigDecimal betrag = new BigDecimal(14.99);
        BigDecimal prozentsatz = new BigDecimal(50);
        BigDecimal prozentwert = betrag
                              .multiply(prozentsatz)
                              .divide(HUNDERT);
        BigDecimal result = betrag.subtract(prozentwert);
        result = result.setScale(5, BigDecimal.ROUND_HALF_UP);
        System.out.println("Betrag: " + betrag);
        System.out.println("Prozentsatz: " + prozentsatz);
        System.out.println("Prozentwert: " + prozentwert);
        System.out.println("Ergebnis: " + result);
      
        return result;
   }
}
Nur wie setzt ich das nun um, dass meine Methoden die Signatur von oben haben? Oder noch wichtiger, was für Werte muss ich beim Methodenaufruf eingeben? Geb ich einfach die 14.99 und 50 ein wie im Test, bekomme ich die Meldung "Error: incompatible types: Double cannot be converted to java.math.BigDecimal".

Bin für jede Hilfe dankbar!
 
Zuletzt bearbeitet von einem Moderator:

andrade

Mitglied
Nein! Ich beschäftige mich schon den ganzen Morgen damit, google ohne Ende. Aber hab wohl irgendwo ein Brett vor dem Kopf. Die beiden Seiten hatten ich auch schon gelesen.
Wenn ich aufrufe (bei uns mittels BlueJ) BigDecimal prozent(BigDecimal betrag, BigDecimal prozentsatz), in welcher Art würdest du die Zahlen eingeben? Wie gesagt 14.99 z.B. geht nicht. "14.99" auch nicht und ich weiß nicht wieviele Versionen ich noch getestet habe...
 

VfL_Freak

Top Contributor
Moin,

weder noch ...
Hast Du die beiden Links überhaupt gelesen ?? :rolleyes:
Da steht doch ganz klar drin, wie Du den double in BigDecimal casten musst ... :(

Gruß Klaus
 

VfL_Freak

Top Contributor
weil bei Deiner Deklaration
Java:
 BigDecimal betrag = new BigDecimal( 14.99 );
der Wert "14.99" nun mal ein Double ist :rolleyes:

Gruß Klaus

EDIT: einen Konstruktor gibt es schon, aber versuch es doch mal so, wie im zweiten Link beschrieben:
Java:
double val = 77.48;
BigDecimal.valueOf(val);
 
Zuletzt bearbeitet:

andrade

Mitglied
Okay, 14.99 ist ein double. Das seh ich nun auch :)
Aber ich möchte ja nun direkt die Methode BigDecimal prozent(BigDecimal betrag, BigDecimal prozentsatz) aufrufen und dabei ja Parameter übergeben (durch direkt Eingabe der Daten).
Und da seh ich einfach nicht, in wiefern mir das von dir eingebrachte double val etc mir da helfen soll. Das hatte ich nämlich in dem Link auch schon gesehen. Ich hoffe ihr könnt mein Problem verstehen.
 

Joose

Top Contributor
Ist dir diese Zeile auch aufgefallen?
Java:
BigDecimal.valueOf(val);
Schon mal geschaut diese macht? Du kannst direkt auf BigDecimal draufklicken und kommst damit zur Dokumentation. Dann lies dir einfach mal durch was die Methode "valueOf" macht und zurückliefert :)
 

andrade

Mitglied
So sieht der Methodenaufruf aus. Könnt ihr mir da mal bitte ein konkretes Beispiel nennen, was ich da eingeben kann?
 

Anhänge

  • methode.png
    methode.png
    45,2 KB · Aufrufe: 35
  • methode2.png
    methode2.png
    46,8 KB · Aufrufe: 59

Joose

Top Contributor
Entschuldigung du hast zwar BlueJ erwähnt aber dabei dachten wir beide nicht an diese Eingabe sondern einen ganz normalen Methodenaufruf im Code ;)

"java.math.BigDecimal.valueOf(1.23)" musst du eingeben, habs bei mir gerade getestet. Ob es auch einfacher geht weiß ich nicht. Habe nie wirklich mit BlueJ gearbeitet.
 

andrade

Mitglied
Danke! Das hab ich nur gesucht. Wahrscheinlich muss es einfacher gehen. Das ganze wird mit einem Roboter kontrolliert und ich kann mir eigentlich nicht vorstellen, dass man so einen langen Aufruf eingeben muss
 

Joose

Top Contributor
Naja wenn du diese Methode nicht über die BlueJ Oberfläche aufrufst sondern wirklich im Code dann reicht es BigDecimal zu importieren und "BigDecimal.valueOf(1.1)" zu schreiben.
 

andrade

Mitglied
BigDecimal ist natürlich importiert.
Laut Aufgabe soll ich die Methode mit den Aufrufparamtern testen:
50, 20
100, 0.1
100, 0.000001
1000, 0.000001
Also muss es da noch eine Möglichkeit geben, auf die ich einfach nicht komme.
 

Joose

Top Contributor
Kann es sein das du einfach in der "main" Methode ein Objekt deiner Klasse erstellen sollst und dann im Code die Methode mit diesen Parametern aufrufen sollst? (Und nicht über die BlueJ Oberfläche)
 

andrade

Mitglied
leider nein. Eine Mainmethode haben wir hier nicht und soll auch nicht hinzugefügt werden. Der Prof würde das dann über JUnit-Tests kontrollieren, ob alles richtig programmiert wurde.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Klasse in Runden Klammern bei Objektimplementierung Java Basics - Anfänger-Themen 4
S Runden auf den niedrigsten Wert Java Basics - Anfänger-Themen 10
M Double Wert nach n abschneiden ohne zu runden Java Basics - Anfänger-Themen 1
Z Runden Arraylist Java Basics - Anfänger-Themen 9
A Random Double mit Math.round() runden? Java Basics - Anfänger-Themen 1
J Hilfe beim Runden Java Basics - Anfänger-Themen 4
S Runden von Zahlen Java Basics - Anfänger-Themen 1
J Fehler beim Runden Java Basics - Anfänger-Themen 3
T ungewolltes Runden Java Basics - Anfänger-Themen 5
K Double Wert runden und in Int umwandeln Java Basics - Anfänger-Themen 7
M Double Wert auf 2 Kommastellen runden Java Basics - Anfänger-Themen 2
K Methoden Integer runden/aufrunden Java Basics - Anfänger-Themen 2
F Zeiteinheit auf ganze Zahl runder runden Java Basics - Anfänger-Themen 4
L Nachkommastellen Runden, Problem mit Syntax " }" Java Basics - Anfänger-Themen 2
J Auf den nächsten Zehner runden? Java Basics - Anfänger-Themen 4
C Nach Berechnung runden und Wert ausgeben Java Basics - Anfänger-Themen 7
A Richtig runden Java Basics - Anfänger-Themen 9
M Double-Zahlen auf Intervalle runden Java Basics - Anfänger-Themen 3
H Runden klappt nicht Java Basics - Anfänger-Themen 10
S Zahlen runden Java Basics - Anfänger-Themen 5
E Runden Java Basics - Anfänger-Themen 2
U Erste Schritte Kommazahl runden Java Basics - Anfänger-Themen 17
K Große Gleitkommazahlen runden Java Basics - Anfänger-Themen 8
Luk10 Nachkommastellen runden Java Basics - Anfänger-Themen 2
S Runden eines doubles auf n nachkommastellen Java Basics - Anfänger-Themen 10
H Zahl auf 2 nachkomma stellen runden Java Basics - Anfänger-Themen 13
M Float auf bestimmte Nachkommazahl runden Java Basics - Anfänger-Themen 3
I Runden / Zweikommastellen geht nicht... Java Basics - Anfänger-Themen 3
J Konvertieren und Runden von double in int Java Basics - Anfänger-Themen 3
H Datentypen Rechnen und Runden Java Basics - Anfänger-Themen 2
O Runden - x/100 liefert long zurück Java Basics - Anfänger-Themen 7
T Runden mit Präzision vs. Runden mit Nachkommastellen Java Basics - Anfänger-Themen 4
J Runden mit printf Java Basics - Anfänger-Themen 3
-horn- Runden auf x-Stellen wirklich nur so umständlich? Java Basics - Anfänger-Themen 9
F (Verständnis)Problem: Zahl auf 2 Nachkommastellen runden Java Basics - Anfänger-Themen 5
Rika Runden Java Basics - Anfänger-Themen 6
F Werte runden Java Basics - Anfänger-Themen 11
N Runden Java Basics - Anfänger-Themen 6
J Runden auf 2 Nachkommastellen ? Java Basics - Anfänger-Themen 5
D runden ohne math! (zur not auch mit) Java Basics - Anfänger-Themen 9
D Einfache Funktion zum kaufmännischen runden Java Basics - Anfänger-Themen 8
J richtig runden Java Basics - Anfänger-Themen 4
B Double je nach Nachkommastellen kfm runden Java Basics - Anfänger-Themen 7
J Runden Java Basics - Anfänger-Themen 4
G divisions ergebnis runden Java Basics - Anfänger-Themen 3
P Runden auf eine Nachkommastelle Java Basics - Anfänger-Themen 18
S Wie runden man noch mal auf bestimmte stellen? Java Basics - Anfänger-Themen 8
S double runden Java Basics - Anfänger-Themen 5
W Runden Java Basics - Anfänger-Themen 10
G Durch Liste iterieren und nachkommastellen runden Java Basics - Anfänger-Themen 9
C Ergebnisse auf 2 Kommastellen runden Java Basics - Anfänger-Themen 3
R Zahl runden Java Basics - Anfänger-Themen 18
M Runden eines Doublewerts auf 13 Zeichen Java Basics - Anfänger-Themen 10
A Runden Java Basics - Anfänger-Themen 5
G Kein Runden Java Basics - Anfänger-Themen 3
R "Kaufmännisch runden" Java Basics - Anfänger-Themen 12
P Automatisch auf die nächst höere zahl runden? Java Basics - Anfänger-Themen 7
F Long umwandeln und auf 2 Dezimalen runden? Java Basics - Anfänger-Themen 14
M runden Java Basics - Anfänger-Themen 9
D Einmal Runden ohne alles Java Basics - Anfänger-Themen 7
P Dezimalstellen limitieren (runden auf 2 Stellen) Java Basics - Anfänger-Themen 3
L Automatischen Runden oder Abschneiden? Java Basics - Anfänger-Themen 2
C Runden auf 2 Nachkommastellen klappt nicht||| WARUM Java Basics - Anfänger-Themen 13
S Double runden funktioniert nicht immer ? Java Basics - Anfänger-Themen 2
O Dezimal in Dual...Arraygröße & Runden Java Basics - Anfänger-Themen 4
A Bestimmt blöde Frage: Zahl runden Java Basics - Anfänger-Themen 10
K Fliesskommawert runden Java Basics - Anfänger-Themen 3
L Runden Java Basics - Anfänger-Themen 2
G Zahlen runden Java Basics - Anfänger-Themen 3
C double runden Java Basics - Anfänger-Themen 6
V Double runden Java Basics - Anfänger-Themen 6
D Zahlen runden Java Basics - Anfänger-Themen 10
F double wert formatieren und runden Java Basics - Anfänger-Themen 7
C Runden einer Altersangabe Java Basics - Anfänger-Themen 5
P double Zahl runden Java Basics - Anfänger-Themen 2
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
Joker4632 Klassen BigDecimal Multiplikation liefert nicht erwarteten Wert Java Basics - Anfänger-Themen 6
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

Ähnliche Java Themen

Neue Themen


Oben