Wie in C# String in Float umwandeln?

Gast #2351502
Lesenswert?

Hallo Leute


Wie kann ich einen String von dem ich nicht 100% sicher bin ob er eine 
Zahl (float) enthält in einen float umwandeln, ohne dass das Programm 
abstürzt, falls der String z.B. noch Buchstaben oder andere Zeichen 
enthält?


In Delphi gibt es z.B. die beiden Befehle.
_strToIntDef
_strToFloatDef


Wenn der String keine Zahl enthält kann ich einen definierten Wert 
angeben.




string strV1 = "B1.054";
float dblV2;
dblV = strV1.ToString();

So bekommt man sicher einen Programmabsturz.


Was ist die Alternative für dieses Problem?
Gruss

Kill Blinton
Gast #2351557
Lesenswert?

Wenns geht, würde ich auf float verzichten und mich auf ZB auf 4 
Vorkomma 2 Nachkommastellen festlegen.

Du kannst den String Zeichen für Zeichen untersuchen. Tritt eine Zahl 
auf, speicherst du sie in einem Array (Ascii Offset abziehen - '0' bei 
jeder Zahl).

ZB im Array 0234.34 (das Komma nicht im Array)


0*100000 + 2*10000 # 3*1000 + 4 * 100 + 3 * 10 + 4 = ZB Zahl in long int 
Variabel abspeichern und auf Plausibilität testen.


Bibu
Gast #2351563
Lesenswert?

Erzeugt man ein Objekt dieser Klasse:
http://msdn.microsoft.com/de-de/library/system.globalization.numberformatinfo.aspx
...und füllt NumberDecimalSeparator etc. passend, kann man auch 
unabhängig von der Systemsprache Dezimaltrenner-Zeichen etc. angeben.
Das Objekt kann man dann bei .ToString(), .TryParse() etc. als 
zusätzlichen Parameter mitgeben...
Gast #2352507
Lesenswert?

@NurMalSo:

Kill Blinton schrieb:
> Wenn der String keine Zahl enthält kann ich einen definierten Wert
> angeben.

Aufgrund der Anforderung ist der Ansatz mit der Regex Humbug. Die Frage 
ist, ob der KOMPLETTE String gültig ist, und nicht ob er IRGENDWO eine 
gültiges Fliesskomma-Literal enthält. Da man den mit Regex ermittelten 
String dann sowieso parsen muß, ist es sinnvoll, gleich TryParse zu 
verwenden und für den Fall, dass das Ergebnis false ist, den Defaultwert 
zu verwenden.
1
double d;
2
if ( double.TryParse( inputString,out d ) == false )
3
    d = defaultValue;

Gruß
Markus

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren