<?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[cast auf int]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe hier einen simplen Cast, der mich gerade etwas verwirrt:</p>
<pre><code class="language-cpp">int max = static_cast&lt;int&gt;( (g_maxRadius - g_minRadius) / g_stepsizeRadius );
</code></pre>
<p>g_maxRadiust = 4.0f, g_minRadius = 3.0f und g_stepsizeRadius = 0.1f. Eigentlich müsste er doch dann einfach 10.0f auf int casten. Macht er aber nicht: Nach der Anweisung steht 9 in max.</p>
<p>Teile ich die Anweisung in 2 Anweisungen auf, so geht es seltsamerweise:</p>
<pre><code class="language-cpp">float ff = (g_maxRadius - g_minRadius) / g_stepsizeRadius; // ff ist 10.0f
int max = static_cast&lt;int&gt;( ff );
</code></pre>
<p>// max ist 10</p>
<p>Wahrscheinlich übersehe ich gerade was total triviales, aber im Moment versteh ich das Verhalten nicht. Kann mir das einer erklären, wieso in der oberen Anweisung 9 statt 10 rauskommt?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/199858/cast-auf-int</link><generator>RSS for Node</generator><lastBuildDate>Sat, 03 Oct 2026 22:08:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/199858.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 07 Dec 2007 18:49:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to cast auf int on Fri, 07 Dec 2007 18:49:50 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe hier einen simplen Cast, der mich gerade etwas verwirrt:</p>
<pre><code class="language-cpp">int max = static_cast&lt;int&gt;( (g_maxRadius - g_minRadius) / g_stepsizeRadius );
</code></pre>
<p>g_maxRadiust = 4.0f, g_minRadius = 3.0f und g_stepsizeRadius = 0.1f. Eigentlich müsste er doch dann einfach 10.0f auf int casten. Macht er aber nicht: Nach der Anweisung steht 9 in max.</p>
<p>Teile ich die Anweisung in 2 Anweisungen auf, so geht es seltsamerweise:</p>
<pre><code class="language-cpp">float ff = (g_maxRadius - g_minRadius) / g_stepsizeRadius; // ff ist 10.0f
int max = static_cast&lt;int&gt;( ff );
</code></pre>
<p>// max ist 10</p>
<p>Wahrscheinlich übersehe ich gerade was total triviales, aber im Moment versteh ich das Verhalten nicht. Kann mir das einer erklären, wieso in der oberen Anweisung 9 statt 10 rauskommt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416720</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Fri, 07 Dec 2007 18:49:50 GMT</pubDate></item><item><title><![CDATA[Reply to cast auf int on Fri, 07 Dec 2007 19:12:47 GMT]]></title><description><![CDATA[<p>Es liegt an der Genauigkeit. Es kommt oben bei dir (wahrscheinlich wegen den<br />
ganzen Ungenauigkeiten) 9,999... raus. Das wird dann auf 9 gerundet (nicht auf<br />
10 wie man in der Schule gelernt hat!!!)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416729</guid><dc:creator><![CDATA[*D*]]></dc:creator><pubDate>Fri, 07 Dec 2007 19:12:47 GMT</pubDate></item><item><title><![CDATA[Reply to cast auf int on Fri, 07 Dec 2007 19:43:28 GMT]]></title><description><![CDATA[<p>Dann müsste doch auch in ff 9.999999999999 stehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416740</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416740</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Fri, 07 Dec 2007 19:43:28 GMT</pubDate></item><item><title><![CDATA[Reply to cast auf int on Fri, 07 Dec 2007 19:51:15 GMT]]></title><description><![CDATA[<p>Hm... *weitergrübl*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416741</guid><dc:creator><![CDATA[*D*]]></dc:creator><pubDate>Fri, 07 Dec 2007 19:51:15 GMT</pubDate></item><item><title><![CDATA[Reply to cast auf int on Fri, 07 Dec 2007 20:13:49 GMT]]></title><description><![CDATA[<p>Bei der Konvertierung in einen Gleitkommatypen geringerer Genauigkeit ist ggf. zu runden. Der C++-Standard überlässt es der Implementation zu entscheiden, wie zu runden ist (Im Gegensatz zur Konvertierung in Integer, dort schreibt der C++-Standard vor, dass der gebrochene Anteil der Zahl einfach verworfen wird). Eine IEEE 754-konforme Implementation muss allerdings zur nächsten im kleineren Zahlenformat exakt darstellbaren Zahl runden.</p>
<p>Die direkte Konvertierung in ein int schneidet also Nachkommastellen ab, die vorherige Konvertierung in ein float führt dagegen möglicherweise zu einem aufrunden, sofern der relative Fehler des Operanden klein genug ist - folglich ist das kein wirklich geeignetes Mittel, um solche Probleme allgemein zu lösen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416746</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 07 Dec 2007 20:13:49 GMT</pubDate></item><item><title><![CDATA[Reply to cast auf int on Fri, 07 Dec 2007 20:16:35 GMT]]></title><description><![CDATA[<p>Hm, find ich ziemlichen Mist sowas. Naja, gäbe es denn überhaupt ne elegantere Methode als es einfach aufzusplitten in 2 Anweisungen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416747</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Fri, 07 Dec 2007 20:16:35 GMT</pubDate></item><item><title><![CDATA[Reply to cast auf int on Fri, 07 Dec 2007 20:21:52 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int main(int argc, char *argv[])
{
 float g_maxRadius = 4.0f;
 float g_minRadius = 3.0f;
float  g_stepsizeRadius = 0.1f;

float x = (g_maxRadius - g_minRadius);
std::cout &lt;&lt; &quot;sub= &quot;&lt;&lt;x &lt;&lt;std::endl  ;
float y = x / g_stepsizeRadius;
std::cout &lt;&lt; &quot;div= &quot;&lt;&lt;y&lt;&lt;std::endl  ;
int max = static_cast&lt;int&gt;( y );
std::cout &lt;&lt; &quot;max= &quot;&lt;&lt;max&lt;&lt;std::endl  ;

  return EXIT_SUCCESS;
}
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /><br />
sub= 1<br />
div= 10<br />
max= 10<br />
Press Enter to continue!</p>
<p>:xmas1:</p>
<p>EDIT: okay, also kein aufspalten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416749</guid><dc:creator><![CDATA[golden_jubilee]]></dc:creator><pubDate>Fri, 07 Dec 2007 20:21:52 GMT</pubDate></item><item><title><![CDATA[Reply to cast auf int on Fri, 07 Dec 2007 20:29:57 GMT]]></title><description><![CDATA[<p>this-&gt;that schrieb:</p>
<blockquote>
<p>Hm, find ich ziemlichen Mist sowas. Naja, gäbe es denn überhaupt ne elegantere Methode als es einfach aufzusplitten in 2 Anweisungen?</p>
</blockquote>
<p>Das ist die falsche Frage, zumal der Umweg über float - wie schon gesagt - keine Lösung darstellt. Die Frage ist eher, warum du überhaupt ein Ergebnis, dass im Regelfall nicht exakt als Integer darstellbar ist, in ein int schreiben willst - oder ob du nicht von vornherein nur einen gerundeten Wert erhalten möchtest. In letzterem Falle muss die Frage dann lautet, wie man richtig rundet, und ein cast nach int schneidet einfach Nachkommastellen ab, rundet also immer in Richtung 0, was im Allgemeinen nicht das gewünschte Verhalten ist.<br />
Wenn keine Besonderheiten vorliegen, sollte</p>
<pre><code class="language-cpp">double f = ...
int i = static_cast&lt; int &gt;( floor( f + .5 ) );
</code></pre>
<p>das gewünschte Ergbnis bewirken = aufrunden bei 0.5 (betragsmäßiges abrunden bei negativen Zahlen). Falls negative Zahlen nicht vorkommen, kann man auf das floor auch verzichten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416756</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 07 Dec 2007 20:29:57 GMT</pubDate></item><item><title><![CDATA[Reply to cast auf int on Fri, 07 Dec 2007 20:40:40 GMT]]></title><description><![CDATA[<p>Hm, find ich grad doch bissel ätzend (an C++), dass man wegen so was trivialem wieder rumfrickeln muss.<br />
Habs gerade mit C# getestet, und da gibt der Einzeiler auch ohne floor gefummel einfach 10, wie es auch sein sollte.<br />
Naja, dennoch danke für die Antworten. :xmas1:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416761</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416761</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Fri, 07 Dec 2007 20:40:40 GMT</pubDate></item><item><title><![CDATA[Reply to cast auf int on Fri, 07 Dec 2007 22:32:41 GMT]]></title><description><![CDATA[<p>this-&gt;that schrieb:</p>
<blockquote>
<p>Hm, find ich grad doch bissel ätzend (an C++), dass man wegen so was trivialem wieder rumfrickeln muss.<br />
Habs gerade mit C# getestet, und da gibt der Einzeiler auch ohne floor gefummel einfach 10, wie es auch sein sollte.</p>
</blockquote>
<p>Nichts davon hat irgendetwas mit den Gründen zu tun, weswegen dieses Unterforum existiert. Bitte verschwende hier nicht deine und unsere Zeit mit derartigen Bemerkungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416815</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 07 Dec 2007 22:32:41 GMT</pubDate></item><item><title><![CDATA[Reply to cast auf int on Fri, 07 Dec 2007 23:31:06 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>this-&gt;that schrieb:</p>
<blockquote>
<p>Hm, find ich grad doch bissel ätzend (an C++), dass man wegen so was trivialem wieder rumfrickeln muss.<br />
Habs gerade mit C# getestet, und da gibt der Einzeiler auch ohne floor gefummel einfach 10, wie es auch sein sollte.</p>
</blockquote>
<p>Nichts davon hat irgendetwas mit den Gründen zu tun, weswegen dieses Unterforum existiert. Bitte verschwende hier nicht deine und unsere Zeit mit derartigen Bemerkungen.</p>
</blockquote>
<p>Musst doch nicht gleich weinen, nur weil ich mal C++ kritisiert habe. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416845</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Fri, 07 Dec 2007 23:31:06 GMT</pubDate></item></channel></rss>