Zinsberechnung mit INT Operatoren

BuckRogers

Bekanntes Mitglied
Hallo shygo,

es wäre schön wenn du deine Lösung posten würdest anstatt einfach alles zu löschen, damit die Community auch etwas davon hat. Außerdem gibt es auch Leute die durchaus an einer Lösung für dich arbeiten und denen du damit vor den Kopf stößt.

Gute Nacht ;)
 

Joose

Top Contributor
Du hättest deinen Post ruhig stehen lassen können und stattdessen deine gefundene Lösung als Antwort posten können.
Es gibt sicher auch andere mit einem ähnlichen Problem denen damit geholfen gewesen wäre :)
 

shygo

Mitglied
Ok Leute, kann leider meinen ersten Beitrag nicht editieren. Desweiteren bin ich auf ein neues Problem gestoßen.

Hier bisher mein Quellcode der den Zins 3 % von dem EIngangsbetrag 117 Euro berechnet für 1,2,3 Jahre und diese getrennt als Vorkommastelle und Nachkommastelle darstellt.

Java:
/*
 * Die Klasse Zinsberechung berechnet den Ertrag durch die Zinsen nach 1,2 und
 * 3 Jahren und gibt diese in Euro und Cent durch ein "," getrennt dar.
 */
/**
 * @author
 */
public class Zinsberechnung {
    
    /**
     * @param args  wird nicht verwendet
     */
    public static void main(String[] args) {

       /* Deklaration der Varibalen */
        int Betrag;        
        int Zins;
        int BetragGanz;
        int BetragRest;
        
        
        /* Wertezuweisung der Varibalen, ausgeschlossen von BetragGanz/Rest */
      
        Betrag = 117;
        Zins = 3;
        
        
        /** 
         * Berechnung des Zinsertrages nach einem Jahr mit 3% Zinsen pro Jahr
         * Anschließend wird der vorherige Betrag dazu addiert um den neuen
         * Betrag zu erhalten
         */
        
        BetragGanz = Zins * Betrag / 100 + Betrag;
        
        /**
         * Um Die Nachkommastellen auch noch anzeigen zu können rechnen wir 
         * einfach aus der vorherigen Formel den Rest aus und geben diesen als
         * BetragRest aus
         */
        
        BetragRest = Zins * Betrag % 100;
        
        
        
        /* Ausgabe des neuen Betrages nach einem Jahr*/
        System.out.print(BetragGanz);
        System.out.print(",");
        System.out.print(BetragRest);
        System.out.println();
        
        /**
         * Das selbe machen wir nun mit den restlichen 2 Jahren 
         * mit dem Unterschied das wir eine Gleitkommazahl erst in eine 
         * Ganze Zahl umwandeln müssen 120,51 * 100 und den Zins * 100
         **/
        
       Betrag = 12051;
       Zins = 300;
              
       
       /**
        * BetragGanz ergibt 12412 und wird mit / 10000 dividiert da der Betrag 
        * nun 10.000 % ergbit. Anschließend wird der Betrag dazuaddiert um die 
        * ganze Zahl vom neuen Betrag zu erhalten in INT. 
        */
       
       BetragGanz = (Zins * Betrag) / 10000 + Betrag;
       
       /** BetragRest rechnet die Nachkommastellen aus durch die
        * Kommaverschiebungen
       **/
       BetragRest = BetragGanz % 100;
       
       /**
        * Nun wird der Betragganz wieder in Dezimal ausgerechnet mit / 100
        * ergibt sich dann 124,12 . Durch den Operator INT verschwinden die 
        * Nachkommastellen und die 124 bleit gespeichert und wird ausgegeben.
        */
       BetragGanz = BetragGanz / 100;
       
       
        System.out.print(BetragGanz);
        System.out.print(",");
        System.out.print(BetragRest);
        System.out.println();
        
        
        
        
        /**
         * Das selbe macht man jetz mit dem letzten Jahr. Die 
         * Kommazahlen werden zu Ganzen Zahlen multipliziert. Der 
         * Betrag und der Zins werden mit 10.000 multipliziert.
         */
        
       Betrag = 12412;
       Zins = 300;
              
       
       BetragGanz = (Zins * Betrag) / 10000 + Betrag;
       
       
       BetragRest = BetragGanz % 100;
       
       
       BetragGanz = BetragGanz / 100;
       
       
       
        System.out.print(BetragGanz);
        System.out.print(",");
        System.out.print(BetragRest);
        System.out.println();
        
        
   
       
    }
}

Nun muss ich eine Aufrundung der Nachkommastelle bewirken mit der Formel x+(1/2). Also auf volle Cent runden.
Das Problem dabei ist das ich ja die Nachkommastelle als eigene Variale habe und diese keine Gleitkommazahl ist.
Wie gesagt Leute es dürfen nur mit INT Zahlen und Operatoren gearbeitet werden.
Sollergebnisse nach dem Aufrunden mit der Formel sind:
120,51
124,13
127,85

Habe bereits etwas rumprobiert aber noch keinen Ansatz gefunden. Es muss die Formel x+(1/2) irgendwie in die Formel der Zinsberechnung eingebaut werden aber ich bin gerade etwas überfordert.

Problem:
Das Problem bei dieser Aufgabe ist, dass man auf der einen Seite mit Zehntel-Cent rechnen muss - sonst gäbe es keinen Grund zu runden-, auf der anderen Seite nur mit Werten des Typs INT rechnen darf.


Danke für eure Hilfe!!!
 
Zuletzt bearbeitet:

Thallius

Top Contributor
Dann rechne doch einfach mit 1/10 cent in einem integer und bei der Ausgabe machst du dann ein / und ein Modulo fertig.

1000 sind dann eben 1 Euro. Wo ist das Problem?

Gruß

Claus
 

shygo

Mitglied
Dann rechne doch einfach mit 1/10 cent in einem integer und bei der Ausgabe machst du dann ein / und ein Modulo fertig.

1000 sind dann eben 1 Euro. Wo ist das Problem?

Gruß

Claus

Und wie soll ich das dann in die Formel einpacken
BetragGanz = (Zins * Betrag) / 10000 + Betrag;

und ich verstehe nciht ganz was du mit "Mache ein / und ein Modulo" was kommt den dazwischen und danach ?
 

Joose

Top Contributor
Und wie soll ich das dann in die Formel einpacken
BetragGanz = (Zins * Betrag) / 10000 + Betrag;

Du musst dafür natürlich jeden Betrag in die entsprechende "Einheit umwandeln".
Sprich dein "Betrag" musst du auf Cent*10 umwandeln usw. Der Zinsatz bleibt natürlich gleich.

und ich verstehe nciht ganz was du mit "Mache ein / und ein Modulo" was kommt den dazwischen und danach ?
Am Ende hast du dann einen Betrag ala "127849" -> €127,849 ... und / bzw. % (Modulo) brauchst du dann um auf ganze Cent zu runden.
 

Thallius

Top Contributor
Was meisnt du mit reinpacken? Du rechnest einfach alles mit 1/10Cent fertig. Der Formel ist es doch total egal ob du mit Euro, Cent oder eben 1/10 Cent rechnest. Es kommt doch immer das Gleiche raus. Nur eben in Euro, Cent oder 1/10 Cent. Wenn Du dann ein 1/10 Cent ergebnis hast, dann kannst du einfach

Euro = Ergebnis/1000;
Cent= ((Ergebnis+5)/10)%100

Fertig
 

shygo

Mitglied
Was meisnt du mit reinpacken? Du rechnest einfach alles mit 1/10Cent fertig. Der Formel ist es doch total egal ob du mit Euro, Cent oder eben 1/10 Cent rechnest. Es kommt doch immer das Gleiche raus. Nur eben in Euro, Cent oder 1/10 Cent. Wenn Du dann ein 1/10 Cent ergebnis hast, dann kannst du einfach

Euro = Ergebnis/1000;
Cent= ((Ergebnis+5)/10)%100

Fertig

Hier habe ich es mal probiert, wenn es richtig ist wie du es beschrieben hast :
Java:
Betrag = 124120;
       Zins = 3;
              
       
       BetragGanz = (Zins * Betrag ) / 1000 + Betrag;
       /**
        * Hier wird / 1000 gerechnet, weil der Betrag in Cent nun 1000 % beträgt
        **/
       
       BetragGanz = BetragGanz / 1000;
       
       /**
        * Bei BetragGanz wird nun das Komma um 3 Stellen verschoben um wieder
        * Euro zu bekommen
        */
       
       BetragRest = (BetragGanz + 5) / 10 % 100;
       
       
       
       
       
        System.out.print(BetragGanz);
        System.out.print(",");
        System.out.print(BetragRest);
        System.out.println();

Leider kommt dann auch nur das selbe Ergebnis raus also 124,12 und nciht 124,13 oder mache ich da was falsch?
 

Thallius

Top Contributor
Hier habe ich es mal probiert, wenn es richtig ist wie du es beschrieben hast :
Java:
Betrag = 124120;
       Zins = 3;
              
       
       BetragGanz = (Zins * Betrag ) / 1000 + Betrag;
       /**
        * Hier wird / 1000 gerechnet, weil der Betrag in Cent nun 1000 % beträgt
        **/
       
       BetragGanz = BetragGanz / 1000;
       
       /**
        * Bei BetragGanz wird nun das Komma um 3 Stellen verschoben um wieder
        * Euro zu bekommen
        */
       
       BetragRest = (BetragGanz + 5) / 10 % 100;
       
       
       
       
       
        System.out.print(BetragGanz);
        System.out.print(",");
        System.out.print(BetragRest);
        System.out.println();

Leider kommt dann auch nur das selbe Ergebnis raus also 124,12 und nciht 124,13 oder mache ich da was falsch?

Ja da ist was falsch. Schau dir die letzten beiden Zeilen nochmal an oder noch besser lass dir den Wert von BetragGanz doch einfach mal vorm berechnen von BetragRest ausgeben.
 

shygo

Mitglied
Leute leider raff ich es immer noch nicht, habe drüber nachgedacht bemerke den Fehler aber nicht.
Also ich habe 124,12 als Betrag. Rechne diesen zuerst * 1000 um von Euro zu Cent zu kommen.

Somit ist der Betrag erstmal = 124120

Dann rechne ich davon die 3 % Zinsen aus = 372.36 Da der INT Wert nur 372 speichert muss ich die Zinsen dann * 100 rechnen damit das Komma sich verschiebt ?

Weil sonst kriege ich den Betrag 124492.36 also 124492 dann durch 1000 sinst 124,49 Euro da mache ich doch schon was falsch oder nicht ?
Bin grad leider überfordert wenn man zu lange für eine Sache nachdenkt und das roblem nicht sieht.
 

VfL_Freak

Top Contributor
Moin,

Also ich habe 124,12 als Betrag. Rechne diesen zuerst * 1000 um von Euro zu Cent zu kommen.
Somit ist der Betrag erstmal = 124120
Dann rechne ich davon die 3 % Zinsen aus = 372.36 Da der INT Wert nur 372 speichert muss ich die Zinsen dann * 100 rechnen damit das Komma sich verschiebt ?
Weil sonst kriege ich den Betrag 124492.36 also 124492 dann durch 1000 sinst 124,49 Euro da mache ich doch schon was falsch oder nicht ?
Warum 'mal 1000' ??
Und selbst wenn, sind dann 3% davon immer noch 3723,6 !!

==> 124,12 * 0,03 = 3,7236 EUR
==> ergo musst Du in diesem Fall mit 10.000 multiplizieren, um keine Nachkommastell zu verlieren

also
124,12 * 10000 = 1241200
1241200 * 0,03 = 37236
37236 / 10000 wären dann die die gesuchten 3,7236 EUR

Gruß
Klaus
 

shygo

Mitglied
Moin,


Warum 'mal 1000' ??
Und selbst wenn, sind dann 3% davon immer noch 3723,6 !!

==> 124,12 * 0,03 = 3,7236 EUR
==> ergo musst Du in diesem Fall mit 10.000 multiplizieren, um keine Nachkommastell zu verlieren

also
124,12 * 10000 = 1241200
1241200 * 0,03 = 37236
37236 / 10000 wären dann die die gesuchten 3,7236 EUR

Gruß
Klaus

Hallo VFL,

mein Ziel ist es nicht gewesen den Zinsertrag davon rauszubekommen. Und * 0,03 darf ich auch nicht nehmen weil es ja kein INT wert ist.

Ich würde mich freuen wenn jmd. eine Lösung hätte damit ich das dann auch nachvollziehen kann.

Ja * 1000 war falsch, stimmt wenn dann / 1000.

Also konkret weiß ich nicht wie ich x + (1/2) in die Formel einbringen muss für das Aufrunden. Das dann bei dem Beispiel 124,12 dann 124,13 rauskommt-
 
Zuletzt bearbeitet:

BuckRogers

Bekanntes Mitglied
Diese Aufgabenstellung ist echt nicht trivial. Gestern Abend habe ich noch zwei Stunden daran gesessen, weil ich dachte ich könnte das mit einer for-Schleife und einem 5-Zeiler lösen, nur um dann festzustellen, dass ich scheiterte. Wie lange hast du noch Zeit dafür?

Grüße
 

shygo

Mitglied
Diese Aufgabenstellung ist echt nicht trivial. Gestern Abend habe ich noch zwei Stunden daran gesessen, weil ich dachte ich könnte das mit einer for-Schleife und einem 5-Zeiler lösen, nur um dann festzustellen, dass ich scheiterte. Wie lange hast du noch Zeit dafür?

Grüße

Eine Schleife darf ich auch nciht benutzen. Sonntag 18 Uhr abgabe. Aber danke das du deine Zeit dafür opferst.
 

taro

Bekanntes Mitglied
Guten Morgen,

es ist noch früh am Morgen, aber hier einmal eine ganz simple Aufrechnung:

Java:
/*
 /*
 * Die Klasse Zinsberechung berechnet den Ertrag durch die Zinsen nach 1,2 und
 * 3 Jahren und gibt diese in Euro und Cent durch ein "," getrennt dar.
 */
/**
 * @author
 */
public class Zinsberechnung {

	/**
	 * @param args
	 *            wird nicht verwendet
	 */
	public static void main(String[] args) {

		/* Deklaration der Varibalen */
		int Betrag;
		int Zins;
		int BetragGanz;
		int BetragRest;

		/* Wertezuweisung der Varibalen, ausgeschlossen von BetragGanz/Rest */

		Betrag = 117;
		Zins = 3;
		
		int rBetrag = Betrag*1000;
		int rZins = rBetrag*Zins/100;
		int gerundet = rBetrag+rZins+5;
		System.out.print(gerundet/1000);
		System.out.print(",");
		System.out.println((gerundet%1000)/10);

		rBetrag = rBetrag+rZins;
		
		rZins = rBetrag*Zins/100;
		rBetrag = rBetrag+rZins;
		gerundet = rBetrag+5;
		
		System.out.print(gerundet/1000);
		System.out.print(",");
		System.out.println((gerundet%1000)/10);

		
		rZins = rBetrag*Zins/100;
		rBetrag = rBetrag+rZins;
		gerundet = rBetrag+5;
		
		System.out.print(gerundet/1000);
		System.out.print(",");
		System.out.println((gerundet%1000)/10);
		
		
	}
}

Nicht schön, aber funktional - ich habe mir erlaubt, es entsprechend ausführlich zu gestalten.

Jetzt ist zumindest mal eine funktionierende Grundlage da :)
Die richtige Variablenzuweisung kann dann durch Überarbeitung durch den TO hergestellt werden.
Im übrigen wird hier mit den nicht gerundeten Werten weitergerechnet - die Genauigkeit liegt bei drei "Nachkommastellen" (bezogen auf volle Euro) ...
 
Zuletzt bearbeitet:

shygo

Mitglied
Guten Morgen,

es ist noch früh am Morgen, aber hier einmal eine ganz simple Aufrechnung:

Java:
/*
 /*
 * Die Klasse Zinsberechung berechnet den Ertrag durch die Zinsen nach 1,2 und
 * 3 Jahren und gibt diese in Euro und Cent durch ein "," getrennt dar.
 */
/**
 * @author
 */
public class Zinsberechnung {

	/**
	 * @param args
	 *            wird nicht verwendet
	 */
	public static void main(String[] args) {

		/* Deklaration der Varibalen */
		int Betrag;
		int Zins;
		int BetragGanz;
		int BetragRest;

		/* Wertezuweisung der Varibalen, ausgeschlossen von BetragGanz/Rest */

		Betrag = 117;
		Zins = 3;
		
		int rBetrag = Betrag*1000;
		int rZins = rBetrag*Zins/100;
		int gerundet = rBetrag+rZins+5;
		System.out.print(gerundet/1000);
		System.out.print(",");
		System.out.println((gerundet%1000)/10);

		rBetrag = rBetrag+rZins;
		
		rZins = rBetrag*Zins/100;
		rBetrag = rBetrag+rZins;
		gerundet = rBetrag+5;
		
		System.out.print(gerundet/1000);
		System.out.print(",");
		System.out.println((gerundet%1000)/10);

		
		rZins = rBetrag*Zins/100;
		rBetrag = rBetrag+rZins;
		gerundet = rBetrag+5;
		
		System.out.print(gerundet/1000);
		System.out.print(",");
		System.out.println((gerundet%1000)/10);
		
		
	}
}

Nicht schön, aber funktional - ich habe mir erlaubt, es entsprechend ausführlich zu gestalten.

Jetzt ist zumindest mal eine funktionierende Grundlage da :)
Die richtige Variablenzuweisung kann dann durch Überarbeitung durch den TO hergestellt werden.
Im übrigen wird hier mit den nicht gerundeten Werten weitergerechnet - die Genauigkeit liegt bei drei "Nachkommastellen" (bezogen auf volle Euro) ...

Ja super, damit ist mir schonmal sehr geholfen. Wäre nett wenn du noch erklären könntest in Zeile 43 nochmal / 10 gerechnet wird. Und beim Betrag + 5 ist das schon die Formel also x + 1/2 ?
 

taro

Bekanntes Mitglied
Zeile 43: Hier nochmal /10, da für die Ausgabe ja nur 2 Kommastellen gebraucht werden, durch %1000 bekommt man aber die letzten 3, weobei die letzte Stelle nicht mehr interessiert. Du kannst die Operation ja testweise mal entfernen und schauen was passiert.

+5 ist in dem Fall das Gleiche wie 1/2.
 
Zuletzt bearbeitet:

Neue Themen


Oben