<?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[String in Float umwandeln]]></title><description><![CDATA[<p>Ich habe ein kleines Programm geschrieben, dass Textdaten aus einem &quot;Char&quot;-Array in einzelne Zeilen zerlegt und dann die Zahlenwerte in eine Float-Variable schreiben sollte.</p>
<p>Leider bekomme ich die Fehlermeldung: &quot;23.131 ist kein gültiger Gleitkommawert&quot;<br />
Der Fehler müsste in der Zeile 46 liegen.</p>
<p>Woran könnte es liegen?</p>
<p>Hier das Programm:</p>
<pre><code class="language-cpp">#include &lt;iostream.h&gt;
#include &lt;vcl.h&gt;

void main()
{
 char buf[50]=&quot;ax=-0.1234 \nay=1.4247 \naz=23.131&quot;;
 cout&lt;&lt;&quot;buf: &quot;&lt;&lt;buf&lt;&lt;endl&lt;&lt;endl;

 int i;
 for (i=0;i&lt;50;i++)
 {
  cout&lt;&lt;&quot;buf[&quot;&lt;&lt;i&lt;&lt;&quot;]: &quot;&lt;&lt;buf[i]&lt;&lt;endl;
 }
 cout&lt;&lt;endl;

 string Eingang;
 Eingang=buf;
 cout&lt;&lt;Eingang&lt;&lt;endl&lt;&lt;endl;

TSysCharSet bchars;
bchars &lt;&lt; '=';
Eingang = WrapText(Eingang.c_str(), &quot;\n&quot;, bchars, 0).c_str(); //Fügt nach jedem = einen Zeilenumbruch ein

cout&lt;&lt;Eingang&lt;&lt;endl&lt;&lt;endl; //Ausgabe zur Kontrolle

TStringList* Daten = new TStringList();
Daten-&gt;Text = Eingang.c_str(); //String in TStringList einlesen
string Zeilen[3];

for(int loop=0; loop&lt;3; loop++)
{
    int loop2=loop+(loop+1);
    Zeilen[loop] = Daten-&gt;Strings[loop2].c_str(); //Daten Aus jeder 2. Zeile der TStringList in Array legen
}

for(int loop=0; loop&lt;3; ++loop)
{
    cout&lt;&lt;Zeilen[loop]&lt;&lt;endl; //Ausgabe der einzelnen Zeilen
}

float test;
test=StrToFloat(Zeilen[2].c_str()); //Konvertierung des Strings in Float
cout&lt;&lt;test&lt;&lt;endl;

 getchar();
}
</code></pre>
<p>Viele Grüße,<br />
Freddy</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/181060/string-in-float-umwandeln</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 16:50:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/181060.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 09 May 2007 15:06:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to String in Float umwandeln on Wed, 09 May 2007 15:06:38 GMT]]></title><description><![CDATA[<p>Ich habe ein kleines Programm geschrieben, dass Textdaten aus einem &quot;Char&quot;-Array in einzelne Zeilen zerlegt und dann die Zahlenwerte in eine Float-Variable schreiben sollte.</p>
<p>Leider bekomme ich die Fehlermeldung: &quot;23.131 ist kein gültiger Gleitkommawert&quot;<br />
Der Fehler müsste in der Zeile 46 liegen.</p>
<p>Woran könnte es liegen?</p>
<p>Hier das Programm:</p>
<pre><code class="language-cpp">#include &lt;iostream.h&gt;
#include &lt;vcl.h&gt;

void main()
{
 char buf[50]=&quot;ax=-0.1234 \nay=1.4247 \naz=23.131&quot;;
 cout&lt;&lt;&quot;buf: &quot;&lt;&lt;buf&lt;&lt;endl&lt;&lt;endl;

 int i;
 for (i=0;i&lt;50;i++)
 {
  cout&lt;&lt;&quot;buf[&quot;&lt;&lt;i&lt;&lt;&quot;]: &quot;&lt;&lt;buf[i]&lt;&lt;endl;
 }
 cout&lt;&lt;endl;

 string Eingang;
 Eingang=buf;
 cout&lt;&lt;Eingang&lt;&lt;endl&lt;&lt;endl;

TSysCharSet bchars;
bchars &lt;&lt; '=';
Eingang = WrapText(Eingang.c_str(), &quot;\n&quot;, bchars, 0).c_str(); //Fügt nach jedem = einen Zeilenumbruch ein

cout&lt;&lt;Eingang&lt;&lt;endl&lt;&lt;endl; //Ausgabe zur Kontrolle

TStringList* Daten = new TStringList();
Daten-&gt;Text = Eingang.c_str(); //String in TStringList einlesen
string Zeilen[3];

for(int loop=0; loop&lt;3; loop++)
{
    int loop2=loop+(loop+1);
    Zeilen[loop] = Daten-&gt;Strings[loop2].c_str(); //Daten Aus jeder 2. Zeile der TStringList in Array legen
}

for(int loop=0; loop&lt;3; ++loop)
{
    cout&lt;&lt;Zeilen[loop]&lt;&lt;endl; //Ausgabe der einzelnen Zeilen
}

float test;
test=StrToFloat(Zeilen[2].c_str()); //Konvertierung des Strings in Float
cout&lt;&lt;test&lt;&lt;endl;

 getchar();
}
</code></pre>
<p>Viele Grüße,<br />
Freddy</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281738</guid><dc:creator><![CDATA[f.sp]]></dc:creator><pubDate>Wed, 09 May 2007 15:06:38 GMT</pubDate></item><item><title><![CDATA[Reply to String in Float umwandeln on Wed, 09 May 2007 15:15:56 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Auf einem deutschsprachigen Windows erwartet StrToFloat ',' als Dezimaltrennzeichen, nicht '.' . Du kannst entweder die Ausgangsstring entsprechend anpassen (<em>StringReplace</em>), oder Anwendungsweit ein entsprechendes Zeichen in <em>DecimalSeparator</em> festlegen.</p>
<p>/Edit : Falls du dein Programm fit machen willst für eine mehrsprachige Anwenderschaft, solltest du Float-Zahlen so speichern das immer genau ein Zeichen (am besten '.') als Dezimaltrennzeichen verwendet wird, unabhängig von Windows-Spracheinstellungen.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281745</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Wed, 09 May 2007 15:15:56 GMT</pubDate></item><item><title><![CDATA[Reply to String in Float umwandeln on Wed, 09 May 2007 15:21:52 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Wie kann ich denn den DecimalSeperator festlegen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281756</guid><dc:creator><![CDATA[f.sp]]></dc:creator><pubDate>Wed, 09 May 2007 15:21:52 GMT</pubDate></item><item><title><![CDATA[Reply to String in Float umwandeln on Wed, 09 May 2007 15:28:06 GMT]]></title><description><![CDATA[<p>Genau <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> (bezog sich auf akaris Post)<br />
und wenn man dann alle Zahlen mit Punkt als Dezimaltrenner gespeichert hat kann man auch gleich die C++Standardmittel (streams) zur Umwandlung nutzen. Die arbeiten nämlich defaultmäßig auf dem C-locale und nutzen auch Punkte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281758</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 09 May 2007 15:28:06 GMT</pubDate></item><item><title><![CDATA[Reply to String in Float umwandeln on Wed, 09 May 2007 15:25:44 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Das hättest du auch schnell durch Nachschlagen in der Builder-Hilfe rausfinden können...</p>
<pre><code class="language-cpp">DecimalSeparator = '.';
</code></pre>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281760</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281760</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Wed, 09 May 2007 15:25:44 GMT</pubDate></item><item><title><![CDATA[Reply to String in Float umwandeln on Thu, 10 May 2007 14:32:34 GMT]]></title><description><![CDATA[<p>da hast recht, sorry...</p>
<p>Aber jetzt hab ich auch schon das nächste Problem <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>ich hab die Größe des Puffers (buf) auf 512 erhöht:</p>
<pre><code class="language-cpp">char buf[512]=&quot;time=12.0111996706285 \nairspeed=22.0635795593262 \naltitude=2043.95642089844 
\nvario=-0.000195638305740431 \ncompass=270 \nslipball=0 
\nturnrate=0 \nyawstringangle=-0.0215568039566278 \nradiofrequency=123.5 
\nyaw=4.71238899230957 \npitch=0 \nbank=0 
\nquaternionx=0 \nquaterniony=0 \nquaternionz=9.73535918546986E-8
 \nquaternionw=1 \nax=0.249863708019257 \nay=0.849863708019257 
\naz=0 \nvx=25 \nvy=-4.07301695304341E-6 
\nvz=0 \nrollrate=-0.00339330825954676 \npitchrate=0
 \nyawrate=0&quot;;
</code></pre>
<p>Und jetzt bekomme ich die Fehlermeldung: &quot;Der Index der Liste überschreitet das Maximum (49)&quot; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1282442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282442</guid><dc:creator><![CDATA[f.sp]]></dc:creator><pubDate>Thu, 10 May 2007 14:32:34 GMT</pubDate></item><item><title><![CDATA[Reply to String in Float umwandeln on Thu, 10 May 2007 14:44:37 GMT]]></title><description><![CDATA[<p>Das hat mit deinem Puffer aber nichts zu tun. Hier läuft irgendein List-Objekt (TList, TStringList etc.) über. Geh mal mit dem Debugger durch. Kontrollier doch einfach mal ob in Daten auch genug Strings sind (Count).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1282456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282456</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 10 May 2007 14:44:37 GMT</pubDate></item><item><title><![CDATA[Reply to String in Float umwandeln on Thu, 10 May 2007 14:53:51 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>Das hat mit deinem Puffer aber nichts zu tun. Hier läuft irgendein List-Objekt (TList, TStringList etc.) über. Geh mal mit dem Debugger durch. Kontrollier doch einfach mal ob in Daten auch genug Strings sind (Count).</p>
</blockquote>
<p>Das es an der TStringList ligt ist klar, aber wie kann ich das Problem beheben?</p>
<p>Die Codestelle:</p>
<pre><code class="language-cpp">string Eingang;
Eingang=buf;

TSysCharSet bchars;
bchars &lt;&lt; '=';
Eingang = WrapText(Eingang.c_str(), &quot;\n&quot;, bchars, 0).c_str(); //Fügt nach jedem = einen Zeilenumbruch ein

TStringList* Daten = new TStringList();
Daten-&gt;Text = Eingang.c_str(); //String in TStringList einlesen
string Zeilen[3];

for(int loop=0; loop&lt;3; loop++)
{
    int loop2=loop+(loop+1);
    Zeilen[loop] = Daten-&gt;Strings[loop2].c_str(); //Daten Aus jeder 2. Zeile der TStringList in Array legen
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1282462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282462</guid><dc:creator><![CDATA[f.sp]]></dc:creator><pubDate>Thu, 10 May 2007 14:53:51 GMT</pubDate></item><item><title><![CDATA[Reply to String in Float umwandeln on Thu, 10 May 2007 15:13:33 GMT]]></title><description><![CDATA[<p>Wie gesagt, in TStringList::Count steht die Anzahl der Zeilen der Stringlist drin. Kontrolliere im Debugger wo der Fehler auftritt und schau dann nach auf welches Listenelement du zugreifen willst. Am besten wäre es, wenn du bei Zugriffen auf deine StringList imm Count mit überprüfst.<br />
In deinem Code kann ja loop2 maximal 5 werden. das kann den fehler also nicht verursachen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1282476</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282476</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 10 May 2007 15:13:33 GMT</pubDate></item><item><title><![CDATA[Reply to String in Float umwandeln on Thu, 10 May 2007 15:21:54 GMT]]></title><description><![CDATA[<p>Das Problem muss ja wohl in Zeile 9 Liegen, weil dort die TStringList gefüllt wird.</p>
<p>Dort wird ja, wie ich es verstehe, der Inhalt der String-Variable &quot;Eingang&quot; in einzelne Zeilen (bei jedem &quot;\n&quot;) aufgeteilt, sind es dort zu viele Zeilen, oder was ist das Problem?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1282484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282484</guid><dc:creator><![CDATA[f.sp]]></dc:creator><pubDate>Thu, 10 May 2007 15:21:54 GMT</pubDate></item><item><title><![CDATA[Reply to String in Float umwandeln on Thu, 10 May 2007 15:33:24 GMT]]></title><description><![CDATA[<p>Das Problem kann nicht in dieser Zeile liegen, da sich hier deine StringList bei Bedarf von selbst vergrößert bis alle Strings hineinpassen.<br />
Hier noch einmal der Hinweis auf den Debugger.<br />
Nicht raten - testen !</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1282492</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282492</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 10 May 2007 15:33:24 GMT</pubDate></item><item><title><![CDATA[Reply to String in Float umwandeln on Thu, 10 May 2007 15:47:07 GMT]]></title><description><![CDATA[<p>Ich hab alles versucht, konnte aber den Fehler nicht finden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1282501</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282501</guid><dc:creator><![CDATA[f.sp]]></dc:creator><pubDate>Thu, 10 May 2007 15:47:07 GMT</pubDate></item><item><title><![CDATA[Reply to String in Float umwandeln on Thu, 10 May 2007 15:52:58 GMT]]></title><description><![CDATA[<p>Bei Bedarf, falls dein Quelltext nicht zu groß ist, kannst du ihn mir per Mail schicken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1282506</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282506</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 10 May 2007 15:52:58 GMT</pubDate></item><item><title><![CDATA[Reply to String in Float umwandeln on Thu, 10 May 2007 16:03:35 GMT]]></title><description><![CDATA[<p>Vielen Dank <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>Das ist schon der ganze Code:</p>
<pre><code class="language-cpp">#include &lt;iostream.h&gt;
#include &lt;vcl.h&gt;

void main()
{
 DecimalSeparator = '.';
 char buf[512]=&quot;time=12.0111996706285 \nairspeed=22.0635795593262 \naltitude=2043.95642089844 \nvario=-0.000195638305740431 \ncompass=270 \nslipball=0 \nturnrate=0 \nyawstringangle=-0.0215568039566278 \nradiofrequency=123.5 \nyaw=4.71238899230957 \npitch=0 \nbank=0 \nquaternionx=0 \nquaterniony=0 \nquaternionz=9.73535918546986E-8 \nquaternionw=1 \nax=0.249863708019257 \nay=0.849863708019257 \naz=0 \nvx=25 \nvy=-4.07301695304341E-6 \nvz=0 \nrollrate=-0.00339330825954676 \npitchrate=0 \nyawrate=0&quot;;

 /*cout&lt;&lt;&quot;buf: &quot;&lt;&lt;buf&lt;&lt;endl&lt;&lt;endl;

 int i;
 for (i=0;i&lt;50;i++)
 {
  cout&lt;&lt;&quot;buf[&quot;&lt;&lt;i&lt;&lt;&quot;]: &quot;&lt;&lt;buf[i]&lt;&lt;endl;
 }
 cout&lt;&lt;endl;
 */

 string Eingang;
 Eingang=buf;
 cout&lt;&lt;Eingang&lt;&lt;endl&lt;&lt;endl;

TSysCharSet bchars;
bchars &lt;&lt; '=';
Eingang = WrapText(Eingang.c_str(), &quot;\n&quot;, bchars, 0).c_str(); //Fügt nach jedem = einen Zeilenumbruch ein

cout&lt;&lt;Eingang&lt;&lt;endl&lt;&lt;endl; //Ausgabe zur Kontrolle

TStringList* Daten = new TStringList();
Daten-&gt;Text = Eingang.c_str(); //String in TStringList einlesen
float Zeilen[3];

for(int loop=0; loop&lt;25; loop++)
{
    int loop2=loop+(loop+1);
    Zeilen[loop] = StrToFloat(Daten-&gt;Strings[loop2].c_str()); //Daten Aus jeder 2. Zeile der TStringList in Array legen
}

for(int loop=0; loop&lt;25; ++loop)
{
    cout&lt;&lt;Zeilen[loop]&lt;&lt;endl; //Ausgabe der einzelnen Zeilen
}

/*
float test;
test=StrToFloat(Zeilen[2].c_str());
cout&lt;&lt;test&lt;&lt;endl;
 */
 getchar();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1282513</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282513</guid><dc:creator><![CDATA[f.sp]]></dc:creator><pubDate>Thu, 10 May 2007 16:03:35 GMT</pubDate></item><item><title><![CDATA[Reply to String in Float umwandeln on Fri, 11 May 2007 07:44:25 GMT]]></title><description><![CDATA[<p>Hier sind ein paar Fehler drin.<br />
1. Zeilen ist nur 3 Elemente groß, du versuchst aber 25 abzulegen.<br />
2. Die Schleife läuft von 0 bis 25 wobei loop2 so maximal 49 werden kann, ohne das du überprüfst wieviel Elemente in deiner Stringlist überhaupt drin sind.<br />
Was soll das mit buf? Warum belegst du Eingang nicht direkt.</p>
<p>Ich würde dir vorschlagen (wie schon ein paar mal) deine Schleife bis StringList-&gt;Count laufen zu lassen und aus der Variablen Zeilen einen vector&lt;float&gt; zu machen..<br />
z.Bsp. so</p>
<pre><code class="language-cpp">int count = Daten-&gt;Count;
std::vector&lt;float&gt; Zeilen;
for(int loop=1; loop&lt;count; loop += 2) // nur jede zweite Zeile
{
    Zeilen.push_back(StrToFloat(Daten-&gt;Strings[loop])); //Daten Aus jeder 2. Zeile der TStringList in vector legen
}
</code></pre>
<p>Der auskommentierte Text darunter ist übrigens Unsinn.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1282811</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282811</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 11 May 2007 07:44:25 GMT</pubDate></item></channel></rss>