Na klar, das kriegen wir schon.
Zunächst einmal hast du vollkommen Recht, dass das ein float sein muss, wenn du mit Nachkommastellen arbeitest. Ich ging nur von einer Lokalisierung aus, wie z.B. wenn 1 Million auf Englisch ("1,000,000") nach Deutsch konvertiert werden muss ("1.000.000").
Ok, dann nochmal die Zeilen im einzelnen:
Code:
String Value = Edit1->Text;
Damit wird ein AnsiString namens Value angelegt und gleich mit dem eingegebenen text aus dem Editfeld gefüllt.
In Result steht dann hinterher der Zahlenwert drin.
Neu dazu genommen werden sollte
Weswegen der vorherige Code evtl. etwas unverständlicher war, weil dort Result zweckentfremdet wurde.
Code:
while ((i = Value.Pos(',')) > 0 )
Hier wird der Value geprüft. Du erinnerst dich? Value enthält den eigegebenen Zahlenwert. Die AnsiString-Funktion Pos() teilt dir nun mit, an welcher Position im String (auf 1 basierend) ein "," vorkommt. Die Bedingung ist also erfüllt, solange ein "," in deinem String gefunden wird. Praktischerweise erlaubt C++ auch sofort die entsprechende Zuweisung. In jedem Fall enthält i die Position des gefundenen "," in deinem String, oder eben 0, wenn kein "," gefunden wurde, wodurch dann die Schleife abbricht.
Diese Anweisung wird nur durchgeführt, wenn in deinem String auch wirklich ein "," vorkam. Dieses wird jetzt (referenziert durch Value[i]) durch einen "." ersetzt.
Code:
Result = StrToFloat(Value);
Zum Zeitpunkt dieser Zeile sollten alle "," aus Value in "." ersetzt worden sein. Es wird
versucht, aus dem String Value einen Float-Wert nach Result zu bilden. Sollte allerdings in Value kein gültiger Float-Wert stehen, führt dieser Aufruf von StrToFloat zu einer Exception. Aber auch dafür gibt es dann Mittel und Wege.
Etwas verständlicher geworden?