<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Anfänger Problem]]></title><description><![CDATA[<p>Hi Community!</p>
<p>Ich bin sowohl neu hier, also auch neu bei C/C++. Für eine Prüfung (bin Student) schreibe ich ein Programm das u.a. folgendes machen soll:<br />
Ich werde aufgefordert einen Geldbetrag einzugeben (im Format xx.xx, also float).<br />
Darauf erfolgt die Ausgabe getrennt in Euro und Cent.<br />
Beispiel:</p>
<blockquote>
<p>Geben Sie den Betrag ein:<br />
12.20</p>
<p>Sie haben 12 Euro und 20 Cent eingegeben.</p>
</blockquote>
<p>Nun habe ich eine Funktion geschrieben, die das ganze erledigen soll. Das tut sie soweit auch ganz gut. Jedoch habe ich immer mal wieder 1 oder 2 Cent Differenz in der Antwort. Es scheint mit den bekannten float-Rundungsfehler zusammen zu hängen, oder?<br />
Beispiel:</p>
<blockquote>
<p>Geben Sie den Betrag ein:<br />
12.23</p>
<p>Sie haben 12 Euro und 22 Cent eingegeben.</p>
</blockquote>
<p>Vielleicht habt ihr einen Tipp für mich, wie ich das besser lösen kann?<br />
Ich wäre sehr dankbar, in ein paar Tagen muß ich das Programm abgeben... (Das ist allerdings nur ein Bruchteil des Programms, den Rest habe ich schon fertig <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /></p>
<p>Gruß,<br />
Speedriff</p>
<pre><code>#include &lt;iostream&gt;
using namespace std;

// Variablen
float fEingabe = 0;
int iEingabe = 0;

// Definition der Funktionen
void Euro_und_Cent(int iBetrag)
{
     cout &lt;&lt; (iBetrag / 100) &lt;&lt; &quot; Euro und &quot; &lt;&lt; int(100 * ((float(iBetrag) / 100) - int(iBetrag / 100))) &lt;&lt; &quot; Cent&quot;;
     }
// Hauptprogramm
main(){
cout &lt;&lt; &quot;Betrag eingeben: &quot; &lt;&lt; endl;
cin &gt;&gt; fEingabe;
iEingabe = fEingabe * 100;
cout &lt;&lt; &quot;Ihre Eingabe entspricht &quot;;
Euro_und_Cent(iEingabe);
cout &lt;&lt; endl;
system(&quot;pause&quot;);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/332233/anfänger-problem</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 10:57:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/332233.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 17 Apr 2015 00:27:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Anfänger Problem on Fri, 17 Apr 2015 00:27:29 GMT]]></title><description><![CDATA[<p>Hi Community!</p>
<p>Ich bin sowohl neu hier, also auch neu bei C/C++. Für eine Prüfung (bin Student) schreibe ich ein Programm das u.a. folgendes machen soll:<br />
Ich werde aufgefordert einen Geldbetrag einzugeben (im Format xx.xx, also float).<br />
Darauf erfolgt die Ausgabe getrennt in Euro und Cent.<br />
Beispiel:</p>
<blockquote>
<p>Geben Sie den Betrag ein:<br />
12.20</p>
<p>Sie haben 12 Euro und 20 Cent eingegeben.</p>
</blockquote>
<p>Nun habe ich eine Funktion geschrieben, die das ganze erledigen soll. Das tut sie soweit auch ganz gut. Jedoch habe ich immer mal wieder 1 oder 2 Cent Differenz in der Antwort. Es scheint mit den bekannten float-Rundungsfehler zusammen zu hängen, oder?<br />
Beispiel:</p>
<blockquote>
<p>Geben Sie den Betrag ein:<br />
12.23</p>
<p>Sie haben 12 Euro und 22 Cent eingegeben.</p>
</blockquote>
<p>Vielleicht habt ihr einen Tipp für mich, wie ich das besser lösen kann?<br />
Ich wäre sehr dankbar, in ein paar Tagen muß ich das Programm abgeben... (Das ist allerdings nur ein Bruchteil des Programms, den Rest habe ich schon fertig <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /></p>
<p>Gruß,<br />
Speedriff</p>
<pre><code>#include &lt;iostream&gt;
using namespace std;

// Variablen
float fEingabe = 0;
int iEingabe = 0;

// Definition der Funktionen
void Euro_und_Cent(int iBetrag)
{
     cout &lt;&lt; (iBetrag / 100) &lt;&lt; &quot; Euro und &quot; &lt;&lt; int(100 * ((float(iBetrag) / 100) - int(iBetrag / 100))) &lt;&lt; &quot; Cent&quot;;
     }
// Hauptprogramm
main(){
cout &lt;&lt; &quot;Betrag eingeben: &quot; &lt;&lt; endl;
cin &gt;&gt; fEingabe;
iEingabe = fEingabe * 100;
cout &lt;&lt; &quot;Ihre Eingabe entspricht &quot;;
Euro_und_Cent(iEingabe);
cout &lt;&lt; endl;
system(&quot;pause&quot;);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2450547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450547</guid><dc:creator><![CDATA[Speedriff]]></dc:creator><pubDate>Fri, 17 Apr 2015 00:27:29 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger Problem on Fri, 17 Apr 2015 01:27:32 GMT]]></title><description><![CDATA[<p>Speedriff schrieb:</p>
<blockquote>
<p>(im Format xx.xx, also float).</p>
</blockquote>
<p>Nein, der Datentyp float folgt nicht aus der Schreibweise. Ähnlichkeit/Gleichheit in der Schreibweise bedingt nicht unbedingt Ähnlichkeit/Gleichheit in der logischen Bedeutung. Du würdest ja auch (hoffentlich) keine Postleitzahlen als Integer verarbeiten, bloß weil sie (in manchen Schreibweisen) aussehen wie Ganzzahlen.</p>
<p>Geld ist eine diskrete Größe. Fließkommazahlen sind das Gegenteil (zumindest so gut wie das in einem Computer eben geht). Das heißt, hier wäre eher ein Datentyp für diskrete Werte angebracht, zum Beispiel ein Integer. Dann rechnest du eben in der Einheit von (ganzen) Cents.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450548</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 17 Apr 2015 01:27:32 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger Problem on Fri, 17 Apr 2015 10:37:56 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Du würdest ja auch (hoffentlich) keine Postleitzahlen als Integer verarbeiten, bloß weil sie (in manchen Schreibweisen) aussehen wie Ganzzahlen.</p>
</blockquote>
<p>Nun ja, ehrlich gesagt hätte ich für Postleitzahlen sehr wohl Integer benutzt. Das scheint mit meinem jetzigen Anfängerwissen eine gute Idee ?!</p>
<p>Sepp3 schrieb:</p>
<blockquote>
<p>Geld ist eine diskrete Größe. Fließkommazahlen sind das Gegenteil (zumindest so gut wie das in einem Computer eben geht). Das heißt, hier wäre eher ein Datentyp für diskrete Werte angebracht, zum Beispiel ein Integer. Dann rechnest du eben in der Einheit von (ganzen) Cents.</p>
</blockquote>
<p>Also rechnen würde ich so gesehen schon mit Integer. Es geht mir im Moment vor allem um die Eingabe der Zahl... Ich möchte aus &quot;optischen&quot; oder ästhetischen Gründen vermeiden, für die Eingabe nach Cent zu fragen.<br />
Gruß,<br />
Speedriff</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450579</guid><dc:creator><![CDATA[Speedriff]]></dc:creator><pubDate>Fri, 17 Apr 2015 10:37:56 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger Problem on Fri, 17 Apr 2015 10:54:30 GMT]]></title><description><![CDATA[<p>Du musst dann die Eingabe als String entgegennehmen, den Dezimalpunkt entfernen und in Integer konvertieren.<br />
Idealerweise vorher noch den String auf Plausibilität prüfen, zB. nur Ziffern, max. ein Dezimalpunkt ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450581</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Fri, 17 Apr 2015 10:54:30 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger Problem on Fri, 17 Apr 2015 11:00:30 GMT]]></title><description><![CDATA[<p>Speedriff schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Du würdest ja auch (hoffentlich) keine Postleitzahlen als Integer verarbeiten, bloß weil sie (in manchen Schreibweisen) aussehen wie Ganzzahlen.</p>
</blockquote>
<p>Nun ja, ehrlich gesagt hätte ich für Postleitzahlen sehr wohl Integer benutzt. Das scheint mit meinem jetzigen Anfängerwissen eine gute Idee ?!</p>
</blockquote>
<p>Was wird z.B. aus &quot;04435 Flughafen Leipzig/Halle Stadt Schkeuditz&quot;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450583</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450583</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Fri, 17 Apr 2015 11:00:30 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger Problem on Fri, 17 Apr 2015 11:08:36 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/31999">@Speedriff</a><br />
Für Teile von Adressen nimmt man Strings. Guck dir mal z.B. britische Adressen an. Die haben so Postleit&quot;zahlen&quot; (&quot;post codes&quot;) wie z.B. &quot;SW7 2AP&quot;. Speicher das mal in einem Integer.</p>
<p>Für Geld nimmt man Fixkomma. Ein gängiger Scaling-Faktor ist 10000, also 4 dezimale Nachkommastellen. Wobei das auch nur geeignet ist wenn man bloss Beträge speichern will. Will man rechnen (mehr als + und -), dann muss man sich schlau machen wie die Anforderungen aussehen. Dazu gibt es in den meisten Ländern Gesetze die regeln wann wo auf wie viele Stellen und nach welchen Regeln gerundet wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450585</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 17 Apr 2015 11:08:36 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger Problem on Fri, 17 Apr 2015 11:29:55 GMT]]></title><description><![CDATA[<p>Speedriff schrieb:</p>
<blockquote>
<p>Also rechnen würde ich so gesehen schon mit Integer. Es geht mir im Moment vor allem um die Eingabe der Zahl... Ich möchte aus &quot;optischen&quot; oder ästhetischen Gründen vermeiden, für die Eingabe nach Cent zu fragen.</p>
</blockquote>
<p>Schreib Dir doch Deine Eingabe selbst.<br />
Also einen Integer einlesen, ein Trennzeichen einlesen noch einen Integer. Und dann richtig zusammenrechnen.</p>
<p>Das geht natürlich beliebig ausgefuchst: Was ist mit negativen Beträgen, was ist Zehntelcents usw. usf.<br />
Aber letztlich ist einen float zu lesen, wenn man einen Betrag haben will auch nicht das gelbe vom Ei. Z.B. ist <code>123.456e7</code> zwar eine gültige eingabe aber ist das gewollt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450593</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450593</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Fri, 17 Apr 2015 11:29:55 GMT</pubDate></item></channel></rss>