<?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[Runden mal wieder und zwar die Zahl 824.77]]></title><description><![CDATA[<p>Hallo.<br />
Ich habe ein kleines Double Rundungsproblem.</p>
<p>Diese Zahl lässt sich nicht vernünftig runden.<br />
Wenn man eine Dezimalverschiebung macht wie bei fast allen Rundungsansätzen, bekommt man 82477 als Int Wert und dividiert diesen später um 100.</p>
<p>double a = 82477;<br />
double b = a / 100; // b = 824.76999999999998</p>
<p>alleine die Zuweisung geht nicht<br />
double ttt2 = 824.77; // im debugger = 824.76999999999998</p>
<p>Wie kann ich dieses richtig runden. Gibts da überhaupt eine Mathematische Möglichkeit in c/c++. Im Notfällen auch in .net. Runden über Strings geht auch nicht, da diese Zahl alleine ja schon falsch angezeigt wird.<br />
Mal ganz kurz und dirty und nicht vollständig von 5 aufwerts.</p>
<pre><code>double runden(double Zahl, int Stellen)
{
	// so wie aus dem FAQ runden
	double v[] = { 1, 10, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8 };  // mgl. verlängern
	double ergebniss = floor(Zahl * v[Stellen] + 0.5) / v[Stellen]; 

	const int max_stellen = 256;
	char zahl[max_stellen];
	char zahl2[max_stellen];
	sprintf(zahl,&quot;%f&quot;,ergebniss);
	int trenner_stelle = -1;
	for(int i = 0; i &lt;max_stellen;i++)
	{
		if(trenner_stelle &gt;=0)
		{
			trenner_stelle ++;
		}
		if(zahl[i] == '.')
		{
			trenner_stelle = 0;
		}
		if(trenner_stelle == Stellen)
		{
			if(i + 1 &lt; max_stellen)
			{
				char z = zahl[i+1];
				if(z == '0' || z == '1' || z == '2' || z == '3' ||  z == '4' )
				{
					zahl2[i] = zahl[i];
				}
				else
				{
					zahl2[i] = zahl[i];
				}
			}
			zahl2[i + 1 ] = '\0';
			break;
		}
		else
		{
			zahl2[i] = zahl[i];
		}	
	}

return atof(zahl2);
</code></pre>
<p>Rückgabe passt 824.77. Aber übergabe an einem Double geht nicht.</p>
<p>Danke vorweg.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/292891/runden-mal-wieder-und-zwar-die-zahl-824-77</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 15:41:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/292891.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 20 Sep 2011 05:47:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Runden mal wieder und zwar die Zahl 824.77 on Tue, 20 Sep 2011 05:48:58 GMT]]></title><description><![CDATA[<p>Hallo.<br />
Ich habe ein kleines Double Rundungsproblem.</p>
<p>Diese Zahl lässt sich nicht vernünftig runden.<br />
Wenn man eine Dezimalverschiebung macht wie bei fast allen Rundungsansätzen, bekommt man 82477 als Int Wert und dividiert diesen später um 100.</p>
<p>double a = 82477;<br />
double b = a / 100; // b = 824.76999999999998</p>
<p>alleine die Zuweisung geht nicht<br />
double ttt2 = 824.77; // im debugger = 824.76999999999998</p>
<p>Wie kann ich dieses richtig runden. Gibts da überhaupt eine Mathematische Möglichkeit in c/c++. Im Notfällen auch in .net. Runden über Strings geht auch nicht, da diese Zahl alleine ja schon falsch angezeigt wird.<br />
Mal ganz kurz und dirty und nicht vollständig von 5 aufwerts.</p>
<pre><code>double runden(double Zahl, int Stellen)
{
	// so wie aus dem FAQ runden
	double v[] = { 1, 10, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8 };  // mgl. verlängern
	double ergebniss = floor(Zahl * v[Stellen] + 0.5) / v[Stellen]; 

	const int max_stellen = 256;
	char zahl[max_stellen];
	char zahl2[max_stellen];
	sprintf(zahl,&quot;%f&quot;,ergebniss);
	int trenner_stelle = -1;
	for(int i = 0; i &lt;max_stellen;i++)
	{
		if(trenner_stelle &gt;=0)
		{
			trenner_stelle ++;
		}
		if(zahl[i] == '.')
		{
			trenner_stelle = 0;
		}
		if(trenner_stelle == Stellen)
		{
			if(i + 1 &lt; max_stellen)
			{
				char z = zahl[i+1];
				if(z == '0' || z == '1' || z == '2' || z == '3' ||  z == '4' )
				{
					zahl2[i] = zahl[i];
				}
				else
				{
					zahl2[i] = zahl[i];
				}
			}
			zahl2[i + 1 ] = '\0';
			break;
		}
		else
		{
			zahl2[i] = zahl[i];
		}	
	}

return atof(zahl2);
</code></pre>
<p>Rückgabe passt 824.77. Aber übergabe an einem Double geht nicht.</p>
<p>Danke vorweg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121458</guid><dc:creator><![CDATA[tie123]]></dc:creator><pubDate>Tue, 20 Sep 2011 05:48:58 GMT</pubDate></item><item><title><![CDATA[Reply to Runden mal wieder und zwar die Zahl 824.77 on Tue, 20 Sep 2011 07:49:15 GMT]]></title><description><![CDATA[<p>Nicht alle Kommazahlen lassen sich nicht genau speichern. Der Computer speichert die beste Annäherung. Wie das genau funktioniert wird im IEEE 754 Floating Point Standard definiert.</p>
<p>Edit: Falsche Nummer im Standard korrigiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121460</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 20 Sep 2011 07:49:15 GMT</pubDate></item><item><title><![CDATA[Reply to Runden mal wieder und zwar die Zahl 824.77 on Tue, 20 Sep 2011 06:37:39 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Nicht alle Kommazahlen lassen sich nicht genau speichern.</p>
</blockquote>
<p>Ich kaufe noch ein &quot;nicht&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121484</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Tue, 20 Sep 2011 06:37:39 GMT</pubDate></item><item><title><![CDATA[Reply to Runden mal wieder und zwar die Zahl 824.77 on Tue, 20 Sep 2011 06:51:29 GMT]]></title><description><![CDATA[<p>ups <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121487</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 20 Sep 2011 06:51:29 GMT</pubDate></item><item><title><![CDATA[Reply to Runden mal wieder und zwar die Zahl 824.77 on Tue, 20 Sep 2011 07:48:24 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>... wird im IEEE 759 Floating Point Standard definiert.</p>
</blockquote>
<p>Du meinst bestimmt IEEE 754.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121508</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 20 Sep 2011 07:48:24 GMT</pubDate></item><item><title><![CDATA[Reply to Runden mal wieder und zwar die Zahl 824.77 on Tue, 20 Sep 2011 07:50:02 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>314159265358979 schrieb:</p>
<blockquote>
<p>... wird im IEEE 759 Floating Point Standard definiert.</p>
</blockquote>
<p>Du meinst bestimmt IEEE 754.</p>
</blockquote>
<p>Zeitgleich (editiert) <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121509</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 20 Sep 2011 07:50:02 GMT</pubDate></item><item><title><![CDATA[Reply to Runden mal wieder und zwar die Zahl 824.77 on Tue, 20 Sep 2011 10:39:34 GMT]]></title><description><![CDATA[<p>Mit Basistypen geht das nicht, aber mit Basistypen dürfte das auch in den wenigsten anderen Sprachen gehen - die benutzen alle den selben Standard.</p>
<p>Es gibt allerdings Bibliotheken, die diese Funktionalität auf andere Weise bereitstellen; ich denke da etwa an <a href="http://www.mpfr.org/" rel="nofollow">libmpfr</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121585</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Tue, 20 Sep 2011 10:39:34 GMT</pubDate></item><item><title><![CDATA[Reply to Runden mal wieder und zwar die Zahl 824.77 on Tue, 20 Sep 2011 10:44:20 GMT]]></title><description><![CDATA[<p>Entschuldigung, da habe ich gerade falsch geschaltet; 1/100 ist natürlich auch mit längerer Präzision nicht genau darstellbar. Vielleicht kommt man mit den mpq-Funktionen bzw. -Klassen aus <a href="http://gmplib.org/" rel="nofollow">GMP</a> weiter; die können das zumindest intern genau darstellen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121589</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Tue, 20 Sep 2011 10:44:20 GMT</pubDate></item><item><title><![CDATA[Reply to Runden mal wieder und zwar die Zahl 824.77 on Tue, 20 Sep 2011 11:04:36 GMT]]></title><description><![CDATA[<p>Wieso haben immer wieder Leute mit floating-point Probleme? Interne Darstellung und Berechnungen sind innerhalb der vom Datentyp float, double, long double vorgegenen Grenzen (min, max) sehr präzise. Viele denken seit der Grundschule im Dezimalsystem, das für die Computerei unbrauchbar bzw. nicht effizient ist. Für den Menschen sind Binärzahlen schwer zu lesen, für ein Computersystem aber nicht! Sollen die Entwickler von Prozessoren was anderes machen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Wird doch nur teurer und langsamer! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121595</guid><dc:creator><![CDATA[berniebutt]]></dc:creator><pubDate>Tue, 20 Sep 2011 11:04:36 GMT</pubDate></item><item><title><![CDATA[Reply to Runden mal wieder und zwar die Zahl 824.77 on Tue, 20 Sep 2011 15:36:55 GMT]]></title><description><![CDATA[<p>berniebutt schrieb:</p>
<blockquote>
<p>Wieso haben immer wieder Leute mit floating-point Probleme? Interne Darstellung und Berechnungen sind innerhalb der vom Datentyp float, double, long double vorgegenen Grenzen (min, max) sehr präzise. Viele denken seit der Grundschule im Dezimalsystem, das für die Computerei unbrauchbar bzw. nicht effizient ist. Für den Menschen sind Binärzahlen schwer zu lesen, für ein Computersystem aber nicht! Sollen die Entwickler von Prozessoren was anderes machen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Wird doch nur teurer und langsamer! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
</blockquote>
<p>Wir sollten einfach anfangen Binär zu Rechnen und in ASCII zu denken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121731</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121731</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 20 Sep 2011 15:36:55 GMT</pubDate></item><item><title><![CDATA[Reply to Runden mal wieder und zwar die Zahl 824.77 on Tue, 20 Sep 2011 15:46:14 GMT]]></title><description><![CDATA[<p>berniebutt schrieb:</p>
<blockquote>
<p>Wieso haben immer wieder Leute mit floating-point Probleme?</p>
</blockquote>
<p>aus den von dir genannten Punkten folgt, dass die meisten Computer für menschen nicht gut nachvollziehbar rechnen. Aber mal ne andere Sache: hast du jemals etwas sinnvolles zu einem Thema beigetragen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121734</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Tue, 20 Sep 2011 15:46:14 GMT</pubDate></item></channel></rss>