AnsiString in Float geht meist nicht :(
-
Hallo.
Ich habe eine Datei aus der ich lese und im normalfall soll das ausgelesene eine Zahl sein. Dies kann "34,20"(Komma) oder "12.45"(Punkt) sein, oder gar "leer".
Jetzt kommt das Problem:
Wie wandel ich das immer in eine float um?
atof versteht kein "," und schneidet ab. Jedoch macht atof aus nicht-zahlen-strings 0 was FloatToStr nicht kann.
FloatToStr bricht wiederrum bei "." und bei nicht-zahlen-strings mit error ab, also bei "leer".Kann mir da jemand eine Universallösung nennen?

-
Hallo
nimm StrToFloat. Vorher wandelst du alle Punkte in dem String in Kommas um (siehe StringReplace). Um das StrToFloat machst du noch ein try-catch Block, um alle nicht konvertierbaren Strings abzufangen.
bis bald
akari
-
Ist denn das wirklich so richtig?
Mein System steht auf Deutsch .. was ist wenn es auf Englisch(oder andere Sprache) steht und nicht "," sondern "." die Dezimalstelle angeben?
-
Hallo
lies doch einmal in der BCB-Hilfe zu StrToFloat. Da findest du
Die globale Variable DecimalSeparator definiert das Zeichen, das als Dezimaltrennzeichen verwendet werden muß. Tausendertrennzeichen und Währungssymbole sind nicht zulässig. Enthält S keinen gültigen Wert, wird eine EConvertError-Exception ausgelöst.
Du kannst also das auch länderunabhängig machen.
bis bald
akari
-
Ja ne, so einfach ist das nicht.
Wenn ich es global setze, kann ich kein SpinEdit mehr vordefinieren während der Entwicklung und es würde in dem "anderem" Land technisch falsches Format haben.
Das Problem ist aber auch, das dann
float fzahl = TeSpinEdit1->Value;
nicht funktioniert mit "," als Dezimaltrenner, etc etc etcAlso gibt es keine globale Lösung, gut dann muss ich irgendwie mir helfen

Danke für Hinweise.
-
Und es gibt noch ne Möglichkeit: StrToFloatDef(Text,DefaultValue) gibt dir das DefaultValue zurück, wenn Text nicht in Float umgewandelt werden konnte. Damit ist zum Beispiel die Umwandlung von "" in '0' möglich.