<?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[Zahl mit Tausenderpunkten darstellen]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich weiß, dass diese Frage für viele Profis hier ziemlich peinlich sein dürfte. Ich komme eher aus der PHP Gegend und da gibt es format_number.</p>
<p>Für C++ habe ich nach einigem gesucht, aber komischerweise nichts richtiges gefunden, obwohl das Problem sicherlich schon tausendfach gelöst wurde. Daher schonmal sorry.</p>
<p>Ich habe Folgendes:<br />
sprintf(sText, &quot;%i / sec&quot;, iCFDRate);</p>
<p>dieses iCFDRate würde ich gerne mit Tausenderpunkte darstellen, damit bei meiner Ausgabe über<br />
SendDlgItemMessage(m_hwndTabDataInfo, IDC_STATIC_RATE, WM_SETTEXT, 0, (LPARAM)sText);<br />
folgendes geschrieben steht:<br />
250.000</p>
<p>kann mir hierbei bitte jemand helfen?</p>
<p>Vielen Dank und Grüße,<br />
Jonson</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/293283/zahl-mit-tausenderpunkten-darstellen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 04:00:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/293283.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 29 Sep 2011 13:37:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zahl mit Tausenderpunkten darstellen on Thu, 29 Sep 2011 13:37:18 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich weiß, dass diese Frage für viele Profis hier ziemlich peinlich sein dürfte. Ich komme eher aus der PHP Gegend und da gibt es format_number.</p>
<p>Für C++ habe ich nach einigem gesucht, aber komischerweise nichts richtiges gefunden, obwohl das Problem sicherlich schon tausendfach gelöst wurde. Daher schonmal sorry.</p>
<p>Ich habe Folgendes:<br />
sprintf(sText, &quot;%i / sec&quot;, iCFDRate);</p>
<p>dieses iCFDRate würde ich gerne mit Tausenderpunkte darstellen, damit bei meiner Ausgabe über<br />
SendDlgItemMessage(m_hwndTabDataInfo, IDC_STATIC_RATE, WM_SETTEXT, 0, (LPARAM)sText);<br />
folgendes geschrieben steht:<br />
250.000</p>
<p>kann mir hierbei bitte jemand helfen?</p>
<p>Vielen Dank und Grüße,<br />
Jonson</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2125101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2125101</guid><dc:creator><![CDATA[Jonson86]]></dc:creator><pubDate>Thu, 29 Sep 2011 13:37:18 GMT</pubDate></item><item><title><![CDATA[Reply to Zahl mit Tausenderpunkten darstellen on Thu, 29 Sep 2011 14:10:21 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">SendDlgItemMessage( m_hwndTabDataInfo,
                    IDC_STATIC_RATE,
                    WM_SETTEXT,
                    0,
                    (std::stringstream() &lt;&lt; std::setprecision(6) &lt;&lt; iCFDRate &lt;&lt; &quot; / sec&quot;).str().c_str() );
</code></pre>
<p>Quick and dirty Lösung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2125113</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2125113</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Thu, 29 Sep 2011 14:10:21 GMT</pubDate></item><item><title><![CDATA[Reply to Zahl mit Tausenderpunkten darstellen on Thu, 29 Sep 2011 14:58:44 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Nö. Wo kommen denn da Tausenderpunkte?</p>
<p>Ich kenne aber leider auch keine gute Lösung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2125136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2125136</guid><dc:creator><![CDATA[fdfdg]]></dc:creator><pubDate>Thu, 29 Sep 2011 14:58:44 GMT</pubDate></item><item><title><![CDATA[Reply to Zahl mit Tausenderpunkten darstellen on Thu, 29 Sep 2011 15:03:52 GMT]]></title><description><![CDATA[<p>boost::lexical_cast fügt meines Wissens nach standardmäßig Tausenderpunkte hinzu.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2125139</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2125139</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Thu, 29 Sep 2011 15:03:52 GMT</pubDate></item><item><title><![CDATA[Reply to Zahl mit Tausenderpunkten darstellen on Thu, 29 Sep 2011 19:59:36 GMT]]></title><description><![CDATA[<p>Jonson86 schrieb:</p>
<blockquote>
<p>Hallo Leute,</p>
<p>ich weiß, dass diese Frage für viele Profis hier ziemlich peinlich sein dürfte.</p>
</blockquote>
<p>Hallo Jonson,</p>
<p>das muss Dir gar nicht peinlich sein. Sondern eher den C++-Profis. Ich schätze, dass mehr als die Hälfte derselben nicht auf Anhieb wissen, wie das geht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> .</p>
<p>Jonson86 schrieb:</p>
<blockquote>
<p>Ich habe Folgendes:<br />
sprintf(sText, &quot;%i / sec&quot;, iCFDRate);</p>
<p>dieses iCFDRate würde ich gerne mit Tausenderpunkte darstellen, damit bei meiner Ausgabe über<br />
SendDlgItemMessage(m_hwndTabDataInfo, IDC_STATIC_RATE, WM_SETTEXT, 0, (LPARAM)sText);<br />
folgendes geschrieben steht:<br />
250.000</p>
</blockquote>
<p>Wenn Du Tausenderpunkte (also '.') und nicht Tausenderkommas (',') verlangst, so handelt es sich um die im deutschen Sprachraum übliche Trennung von Tausenderstellen. Dann reicht es i.A. einen Ausgabestream auf die deutsche Locale umzustellen. Da Du in Deinem Fall das Ergebnis als String benötigst, ist std::ostringstream das Mittel der Wahl.</p>
<p>Im Prinzip so:</p>
<pre><code class="language-cpp">int iCFDRate = 250000;
    std::ostringstream buf;
    buf.imbue( std::locale(&quot;german&quot;) ); // Der String &quot;german&quot; funktioniert unter Windows, kann sonst abweichen
    buf &lt;&lt; iCFDRate &lt;&lt; &quot; / sec&quot;;
    SendDlgItemMessage( .., (LPARAM)buf.str().c_str()); // Textinhalt: &quot;250.000 / sec&quot;
</code></pre>
<p>Benötigte Includes sind:</p>
<pre><code class="language-cpp">#include &lt;locale&gt; // std::locale
#include &lt;sstream&gt; // std::ostringstream
</code></pre>
<p>Beachte bitte, dass durch die Umstellung auf 'deutsch' auch der Dezimaltrenner von '.' nach ',' wechselt. Solange Du nur int-Variablen ausgibst, spielt das aber keine Rolle.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2125275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2125275</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Thu, 29 Sep 2011 19:59:36 GMT</pubDate></item><item><title><![CDATA[Reply to Zahl mit Tausenderpunkten darstellen on Fri, 30 Sep 2011 17:26:43 GMT]]></title><description><![CDATA[<p>Vielleicht etwas Hintergrund dazu:</p>
<p>Eine Locale ist in C++ ist ein Container von Facetten. Eine Facette übernimmt eine bestimmte Aufgabe, etwa die Formatierung von Zahlen, Geldbeträgen, Uhrzeiten oder sonstigem; sie kann zur Laufzeit aus der Locale herausgeholt und benutzt werden. Zum Beispiel kriegst du den Dezimaltrenner einer Locale durch</p>
<pre><code class="language-cpp">std::locale loc;

...

// std::numpunct&lt;char&gt; ist die benutzte Facette
std::use_facet&lt;std::numpunct&lt;char&gt; &gt;(loc).decimal_point();
</code></pre>
<p>Wenn die Locale die entsprechende Facette nicht beinhaltet, wird std::bad_cast geworfen.</p>
<p>Die Umsetzung ist eine etwas haarige Angelegenheit, weil es jedem Benutzer freisteht, völlig neue Facetten mit beliebigem Interface einzuführen, die der Standardbibliothek nicht bekannt sind (dann allerdings auch nicht von ihr benutzt werden). Eine Facette ist technisch ein Objekt einer Kindklasse von std::locale::facet. Die Locale speichert Zeiger auf std::locale::facet, die bei der Verwendung in den passenden Typen zurückgecastet werden (also per Downcast), somit handelt es sich bei ihr um einen polymorphischen Container - das sind die, von deren Verwendung dir jeder fähige Programmierer unter fast allen Umständen abrät. Jede Facetten(basis)klasse hat einen eindeutigen, statischen ID-Member, damit das nicht böse ins Auge gehen kann.</p>
<p>Wenn einem jetzt bestimmte Aspekte (bzw. Facetten) einer Locale nicht gefallen, kann man von einer der Standardfacetten ableiten, das Verhalten ändern und die eigene Facette in eine Locale stopfen. Diese kann man dann einem Stream zur Benutzung andrehen.</p>
<p>Im konkreten Fall könnte das beispielsweise so aussehen:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;locale&gt;
#include &lt;sstream&gt;
#include &lt;string&gt;

// Hier unsere eigene Facette:
class de_numpunct : public std::numpunct&lt;char&gt; {
public:
  // refs ist zur Referenzzählung. Die letzte Locale räumt die Facette auf.
  explicit de_numpunct(std::size_t refs = 0)
    : std::numpunct&lt;char&gt;(refs) { }

protected:
  // Komma als Dezimaltrenner
  virtual char_type do_decimal_point() const { return ','; }

  // Punkt als Gruppentrenner
  virtual char_type do_thousands_sep() const { return '.'; }

  // Und eine Gruppe soll jeweils drei Ziffern breit sein.
  virtual string_type do_grouping() const { return &quot;\x003&quot;; }
};

int main() {
  // Die Facette in eine Locale stopfen
  std::locale loc(std::locale(), new de_numpunct());

  std::ostringstream fmt;

  // ...und die Locale widerum in den Stream.
  fmt.imbue(loc);

  // Dieser formatiert dann unserer Facette entsprechend.
  fmt &lt;&lt; 123456789;
  std::string s = fmt.str();
  std::cout &lt;&lt; s &lt;&lt; std::endl;
}
</code></pre>
<p>Diese neue Facette zählt für die Locale als std::numpunct&lt;char&gt;, weil sie ihre ID erbt. So wird sie, wenn der Stream std::numpunct&lt;char&gt; von der Locale anfordert, zurückgegeben und benutzt.</p>
<p>Alle Standardfacetten kann ich dir in einem Forumspost natürlich nicht beschreiben; du findest eine Referenz zum Beispiel <a href="http://www.cplusplus.com/reference/std/locale/" rel="nofollow">hier</a>. Die Erstellung ganz eigener Facetten (im Gegensatz zur Ableitung von Standardfacetten) ist eher selten wirklich sinnvoll, aber wenn es dich interessiert, kann ich dazu gern auch ein kurzes Beispiel zusammenschustern.</p>
<p>Mit der Benutzung vorgefertigter Facetten ist das so eine Sache. Grundsätzlich gibt es zwei Probleme:</p>
<p>1. Man muss herausfinden, welche Facetten es gibt und welche man davon benutzen soll. Ich neige dazu, das irgendwo in der Konfiguration einstellbar zu machen, dann ist es nicht mehr dein Problem und ggf. auch nicht mehr deine Schuld.</p>
<p>2. Man weiß nicht genau, was dabei am Ende herauskommt. Hinter Systemlocales kann sich eine Menge verbergen; unter Windows kann der Benutzer in der Systemsteuerung beispielsweise viele Schrauben drehen, wie er lustig ist.</p>
<p>Das bedeutet praktisch: Systemlocales zu benutzen macht dann Sinn, wenn dir nicht wichtig ist, was <em>genau</em> dabei herauskommt, sondern lediglich, dass es mit dem übereinstimmt, was der Benutzer <em>gewohnt</em> ist. Das ist in GUIs fast immer der Fall, aber bei der Ausgabe von maschinenlesbaren Daten (beispielsweise CSV-Export) kann einem so etwas das Genick brechen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2125615</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2125615</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Fri, 30 Sep 2011 17:26:43 GMT</pubDate></item><item><title><![CDATA[Reply to Zahl mit Tausenderpunkten darstellen on Fri, 14 Oct 2011 13:48:02 GMT]]></title><description><![CDATA[<p>Super, vielen Dank für Eure Hilfe und die wirklich tollen Antworten!!!</p>
<p>Viele Grüße,<br />
Jonson</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2131463</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2131463</guid><dc:creator><![CDATA[Jonson86]]></dc:creator><pubDate>Fri, 14 Oct 2011 13:48:02 GMT</pubDate></item></channel></rss>