Zinsberechnung und Runden



  • Hello again...

    Habe ein Problem mit der Ungenauigkeit bei der monatlichen Zinsberechnung.
    Ist jemand auf diesem Gebiet bewandert ??
    Das Prog gibt mir immer zuviel aus.
    Hab versucht zu runden, oder alles Integerwerte zu nehmen...leider auch da ohne Erfolg.
    Schaut es Euch bitte an.
    Irgendwas muss mit dem Runden nicht stimmen.....aber ...??
    Danke.

    Pilsbaron 🙄

    void __fastcall TForm1::ButtonStartClick(TObject *Sender)
    {
     double einmalzahlung, anlagebetrag, zinssatz, einzahlungsdauer;
     double guthaben=0, zinsen;
     int    i=1, w, monate;
    
     bAnhalten=false;
     bSTOP=false;
    
     //Auslesen der Daten
     einmalzahlung    = EditEinmalzahlung->Text.ToDouble();
     anlagebetrag     = EditRegelEinzahlung->Text.ToDouble();
     zinssatz         = EditWertentwicklung->Text.ToDouble();
     einzahlungsdauer = EditEinzahlungsdauer->Text.ToDouble();
    
     //Auswahl -> monatliche Einzahlung
     if(RadioButtonMonatlich->Checked==true)
     {
      monate = einzahlungsdauer * 12;
      guthaben = anlagebetrag;
    
      while(bSTOP==false)
      {
        while((i<=monate) && (!bAnhalten))
        {
                zinsen = (zinssatz * guthaben * 1) / (12 * 100);
                RoundTo(zinsen, -2);
    
                guthaben = guthaben + zinsen;
                RoundTo(guthaben, -2);
    
                 if(i % 12 == 0)  //alle 12 Monate
                 {
                   LabelJahre->Caption = IntToStr(i / 12);
                   LabelBisher->Caption = FloatToStrF((anlagebetrag * i),ffNumber,  10, 2);
                   LabelGuthaben->Caption = FloatToStrF(guthaben, ffNumber, 10, 2);
    
                   for(w=0;w<=50;w++)
                   {
                    Application->ProcessMessages();
                    Sleep(20);
                   }
                 }
                guthaben = guthaben + anlagebetrag;
                Application->ProcessMessages();
                i++;
        }
       Application->ProcessMessages();
      }
      Application->ProcessMessages();
     }
    }
    


  • Debugger schmeißen und den Inhalt der einzelnen Variablen kontrollieren!

    MfG
    xy



  • Pilsbaron,

    Pilsbaron schrieb:

    Hab versucht zu runden, oder alles Integerwerte zu nehmen...

    versuche mal, mit dem Typ Currency zu arbeiten. Der ist für solches Rundungs-Gewurksel vorgesehen. (Infos siehe BCB-Hilfe)


Anmelden zum Antworten