Puh, was stimmt hier nicht? Zinseszinsrechnung, C#?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Ein Hinweis, um selbst die Fehler zu finden, die man so einprogrammiert hat. Bei C# ist das nebenbei auch noch als guter Programmierstil angesagt:

Verkette keine Funktionen, weder in der Form f().g() noch in der Form f(g()).

Wenn Du dann noch komplizierte Formelbildungen vermeidest, dann wird aus Deiner Formel:

var GesamtVerhaeltnis = endkapital/startkapital;
var JahresVerhaeltnis = Math.Sqrt(GesamtVerhaeltnis);
var Wassolldasjetztsein = Math.Sqrt(JahresVerhaeltnis);
var Zinssatz= 100 * Wassolldasjetztsein - 100;
var gerundeterZinssatz = Math.Round(Zinssatz, 2);

Wenn Du das im Debugger durch-"stepst", siehst Du sofort, wo etwas schief läuft.

Und - keine Sorge - der Compiler optimiert so, dass das Programm keinen Deut langsamer läuft, als das einzeilige Klammer-Monster.

Solenostemon 
Fragesteller
 14.03.2017, 15:44

Ich stehe auf dem Schlauch, irgendwo muss die Laufzeit in die Rechnung mit einfließen nur wo und wie..

0
Solenostemon 
Fragesteller
 14.03.2017, 15:54

Ansich liefert sie das richtige Ergebnis wenn man diese Werte nimmt: 

Startkapital 800€, Endkapital 980€, Laufzeit 4 Jahre. 

Aber bei den Werten: 

Startkapital 100€, Endkapital 200€, Laufzeit 10 Jahre. 

Stimmt das Ergebnis nicht mehr.

1
Mikkey  14.03.2017, 16:57
@Solenostemon

Die zwei Jahre hast Du in der Form "Sqrt" verewigt. Mit dem doppelten Wuzelziehen gehst Du auf vier Jahre.

Die Formel darunter ist

Kap(n Jahre) = Kap(0) * Zinsfaktor ^(n Jahre)

oder anders geschrieben:

Zinsfaktor = (Kap(n) / Kap(0)) ^ (1/n)

Für 10 Jahre musst Du also die zehnte Wurzel ziehen.

0
Solenostemon 
Fragesteller
 15.03.2017, 13:02
@Mikkey

Also einen while Loop bauen der alle 2 Jahre eine Wurzel zieht bis das ende der Laufzeit erreicht ist, aber was ist mit ungeraden Jahren ? 

0
Solenostemon 
Fragesteller
 15.03.2017, 13:21
@Mikkey

Aber die While Loop Lösung klingt mir zu sehr nach einer Beamten-Lösung (Eine menge Aufwand für ein simples Problem)´. das muss doch einfacher gehen.  

1
Mikkey  15.03.2017, 17:34
@Solenostemon

Das führt ohnehin zum falschen Ergebnis, mit (Quadrat-)Wurzelziehen erreichst Du nur Laufzeiten von 2, 4, 8, 16 usw. Jahren.

Es gibt die Funktion Math.Pow mit der man entsprechende Wurzeln ziehen kann:

n-te Worzel aus x ist Math.Pow(x, 1.0/n);

1
Solenostemon 
Fragesteller
 16.03.2017, 14:49
@Mikkey

Ach so ist das: ((Math.Pow(Endkapital/Startkapital),(1/Jahre)-1)*100) 

DANKE :-)

0

Du hast für die Laufzeit 2 Jahre gewählt, außerdem ziehst du zu oft die Wurzel.

Solenostemon 
Fragesteller
 13.03.2017, 16:23

die 2 gehört zur Math.Round funktion und weißt sie an das vorstehende Ergebnis auf 2 Nachkommastellen aufzurunden.

0