Ratenzahlung korrekt berechnen
Hallo zusammen,
es geht ums liebe Geld. Bei uns im Gartenverein wird jedes Jahr der Strom abgelesen und der Verbrauch er - und berechnet. Bei den Energiepreisen wollen wir eine Ratenzahlung anbieten. Es soll der Zahlbetrag in maximal 3. Raten bezahlt werden.Soweit der Sachverhalt.N un zur Berechnung.Zahlbetrag / 3 - war mein Ansatz, aber offensichtlich wohl nicht ganz richtig. Beispiel: Forderung 150,00 / 3 = 3 Raten zu je 50,00 Macht hinten dann +- 0,00 Bei 150,01 werden auch 3 Raten a 50, 00 berechnet. Dann ist aber der Saldo -0.01. bei 150,02 sind Raten 50, 01 und am Ende der Saldo +0,01. Ich hoffe Ihr versteht da Problem. Wie kann ich erreichen, das die 3 Raten so berechnet werden, das am Ende der Saldo immer +- 0,00 ist.
Schon Mal im vorraus vielen Dank.
Ach so ja NINOX läuft bei uns auf iPad und Android Tablets für mit Cloud-Anbindung
13 Antworten
-
Wenn die Zahl nicht durch die Anzahl teilbar ist, dann bleibt natürlich Rest. In meinem Beispiel ist die letzte Rate stets etwas größer. Schau mal ob es Dir nützt. Eine Funktion, die Ratenzahlungen berechnet. Erster Eintrag ist Gesamtbetrag, zweiter Eintrag ist die Anzahl der Raten. Wiedergabe ist ein Array mit den Einzelzahlungen. (Ohne Gewähr und so) Mirko
function Ratenzahlung(betrag : number,teiler : number) do let rest := number(item(split(text(betrag), ","), 1)); let first := floor(betrag) % teiler; let result := (floor(betrag) - first) / teiler; let aryPart := for i in range(0, teiler - 1) do result end; array(aryPart, [result + first + rest / 100]) end;
-
Danke für die Antwort, werde es ausprobieren.
-
Hallo Mirko, leider komme ich nicht weiter. Das liegt wohl an meinem Wissen über die Programmierung in Ninox. Ich hatte Deinen Code in ein Berechnungsfeld eingegeben. Es wird kein Wert ausgegeben. Ich habe auch versucht die Feldnamen meiner Tabelle zu integrieren. Ebenfalls ohne erfolg. Nun bin ich mit meinen Kenntnissen am Ende. Kannst Du mir helfen?
Ich füge mal ein Bild mit den Feldnamen an.
Bis jetzt habe ich die 3. Rate immer per Hand eingetragen.
LG Axel
-
Hallo Axel. Lege mal eine Button an und gib folgendes ein:
function Ratenzahlung(betrag : number,teiler : number) do let rBetrag := betrag * 100; let rester := rBetrag % 3; let corBetrag := (rBetrag - rester) / teiler; let firstPart := for i in range(0, teiler - 1) do corBetrag / 100 end; array(firstPart, [round(corBetrag / 100 + rester / 100, 2)]) end; let result := Ratenzahlung(Zahlbetrag, 3); do as server '1. Rate' := item(result, 0); '2. Rate' := item(result, 1); '3. Rate' := item(result, 2) end
-
Wenn du verschiedene Ratenzahlungen benutzt, dann lieber so und die Anzahl der Felder für die Raten beliebig erweitern.
function Ratenzahlung(betrag : number,teiler : number) do let rBetrag := betrag * 100; let rest := rBetrag % teiler; let corBetrag := (rBetrag - rest) / teiler; let firstPart := for i in range(0, teiler - 1) do corBetrag / 100 end; array(firstPart, [round(corBetrag / 100 + rest / 100, 2)]) end; let result := Ratenzahlung(Zahlbetrag, Ratenzahl); do as server '1. Rate' := item(result, 0); '2. Rate' := item(result, 1); '3. Rate' := item(result, 2); '4. Rate' := item(result, 3); '5. Rate' := item(result, 4) . . . end
-
'N Abend, oder vielleicht einfach so?
let myRate := round(Zahlbetrag / 3, 2); '1. Rate' := myRate; '2. Rate' := myRate; '3. Rate' := round(Zahlbetrag - myRate * 2, 2)
Bei einer variablen Anzahl von Raten würde ich mit einer Untertabelle arbeiten:
let myR := Ratenanzahl; let myRate := round(Zahlbetrag / myR, 2); let myList := array(for i in range(0, myR - 1) do myRate end, [round(Zahlbetrag - myRate * (myR - 1), 2)]); let me := this; for i in myList do let newRZ := (create Untertabelle); newRZ.(Haupttabelle := me); newRZ.(Rate := i) end
-
Hallo zusammen, ich werde das mal ausprobieren. Danke
-
Hallo zusammen,
ich nochmal. Habe mich für den Code von Mirko entschieden. In meinem Rechnungsmodul habe ich den Code als Trigger nach Änderung in ein Auswahlfeld (Status) eingebaut. Er funktioniert perfekt.
Danke für Eure Hilfe.
Ich wünsche Euch eine schöne Weihnachtszeit.
LG Axel
Content aside
- Status Answered
- vor 2 JahrenZuletzt aktiv
- 13Antworten
- 99Ansichten
-
4
Folge bereits