Beabsichtigte Restschuld eingebaut

This commit is contained in:
fabianArbeit 2025-03-27 08:49:48 +01:00
parent b0c6af37d1
commit c4357aebcd

View File

@ -17,6 +17,7 @@ class Darlehenberechner {
private BigDecimal zinssatzReal;
private BigDecimal monatlicheRate;
private Integer laufzeitMonate;
private BigDecimal restschuld;
private Integer tilgungsfreieZeit;
private YearMonth anfangsmonat;
private BigDecimal sondertilgungReal;
@ -72,6 +73,17 @@ class Darlehenberechner {
}
public BigDecimal getRestschuld() {
return restschuld;
}
public Konfiguration setRestschuld(BigDecimal restschuld) {
this.restschuld = restschuld;
return this;
}
public Integer getTilgungsfreieZeit() {
return tilgungsfreieZeit;
}
@ -110,6 +122,7 @@ class Darlehenberechner {
private static final BigDecimal EINHUNDERT = BigDecimal.valueOf(100);
private final Integer laufzeitMonate;
private final BigDecimal restschuld;
private final BigDecimal zinssatz;
private BigDecimal sondertilgung;
private int summeMonate = 0;
@ -164,6 +177,12 @@ class Darlehenberechner {
if (in != null && !in.isBlank()) {
String[] split = in.split(":");
konfig.setLaufzeit(Integer.parseInt(split[0]), Integer.parseInt(split[1]));
} else {
System.out.print("Restschuld(optional): ");
in = dis.readLine();
if (in != null && !in.isBlank()) {
konfig.setRestschuld((BigDecimal) DECIMAL_FORMAT.parse(in));
}
}
System.out.print("Anzahl tilgungsfreier Monate(optional): ");
in = dis.readLine();
@ -224,9 +243,13 @@ class Darlehenberechner {
private Darlehenberechner(Konfiguration konfig) {
laufzeitMonate = konfig.getLaufzeitMonate();
restschuld = konfig.getRestschuld();
zinssatz = konfig.getZinssatz();
sondertilgung = konfig.getSondertilgung() != null ? konfig.getSondertilgung().multiply(konfig.getDarlehenswert()) : BigDecimal.ZERO;
aktRestschuld = konfig.getDarlehenswert();
if (restschuld != null) {
aktRestschuld = aktRestschuld.subtract(restschuld);
}
aktMonatlicheRate = konfig.getMonatlicheRate();
aktTilgungsfreieZeit = konfig.getTilgungsfreieZeit();
aktMonat = konfig.getAnfangsmonat();
@ -276,12 +299,17 @@ class Darlehenberechner {
}
boolean sondertilgungFaellingErstesJahr = summeMonate < 12 && aktMonat.getMonth() == Month.DECEMBER;
if (sondertilgungFaellingErstesJahr || summeMonate > 1 && aktMonat.getMonth() == Month.JANUARY) {
aktRestschuld = aktRestschuld.subtract(sondertilgung);
System.out.println(aktMonat + ": " + DECIMAL_FORMAT.format(sondertilgung) + " = 0,00 + " + DECIMAL_FORMAT.format(sondertilgung) + " | " + DECIMAL_FORMAT.format(aktRestschuld));
aktRestschuld = aktRestschuld.compareTo(sondertilgung) > 0 ? aktRestschuld.subtract(sondertilgung) : aktRestschuld;
System.out.println(aktMonat + ": " + DECIMAL_FORMAT.format(sondertilgung) + " = 0,00 + " + DECIMAL_FORMAT.format(sondertilgung) + " | " + DECIMAL_FORMAT.format(getRestschuldFuerOutput()));
}
}
private BigDecimal getRestschuldFuerOutput() {
return restschuld != null ? aktRestschuld.add(restschuld) : aktRestschuld;
}
private void berechneBeitragAufteilung() {
aktZinsbetrag = aktRestschuld.multiply(zinssatz)
.divide(ZWOELF, MathContext.DECIMAL128);
@ -299,7 +327,7 @@ class Darlehenberechner {
private void druckeAktuelleMonatswerte() {
System.out.println(aktMonat + ": " + DECIMAL_FORMAT.format(aktMonatlicheRate) + " = " + DECIMAL_FORMAT.format(aktZinsbetrag)
+ " + " + DECIMAL_FORMAT.format(aktTilgungsbetrag) + " | " + DECIMAL_FORMAT.format(aktRestschuld));
+ " + " + DECIMAL_FORMAT.format(aktTilgungsbetrag) + " | " + DECIMAL_FORMAT.format(getRestschuldFuerOutput()));
}
@ -331,7 +359,8 @@ class Darlehenberechner {
jahressummeTilgungKreditjahr = BigDecimal.ZERO;
jahressummeRatenKreditjahr = BigDecimal.ZERO;
desc = "Kreditjahr " + (summeMonate + 11) / 12; // + 11 weil integerdivision und X Jahre plus 1 Monat soll X + 1 tes Kreditjahr ergeben
} else {
}
if (aktMonat.getMonth() == Month.DECEMBER) {
jahressummeZinsen = jahressummeZinsenKalenderjahr;
jahressummeTilgung = jahressummeTilgungKalenderjahr;
jahressummeRaten = jahressummeRatenKalenderjahr;
@ -364,6 +393,6 @@ class Darlehenberechner {
int laufzeitJahreFinal = summeMonate / 12;
int teillaufzeitMonateFinal = summeMonate % 12;
System.out.println("Laufzeit: " + laufzeitJahreFinal + " Jahre " + teillaufzeitMonateFinal + " Monate");
System.out.println("Restschuld: " + DECIMAL_FORMAT.format(aktRestschuld));
System.out.println("Restschuld: " + DECIMAL_FORMAT.format(getRestschuldFuerOutput()));
}
}