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 #2351644
Lesenswert?
• ▲
▼
...nach dem positiven Match kann steht in dem Match-Ergebnis die Zahl 
als String drin, die man dann leicht umwandeln kann.

Dein TryParse benötigt die reine Zahl im String, also kein "B1.054" wie 
im Beispiel des Thread-Starters.

Also:
  1. mittels Regex den Zahlenstring extrahieren
  2. mit TryParse umwandeln
Gast #2351769
Lesenswert?
• ▲
▼
Ich bin davon ausgegangen das strToFloatDef() für "B1.054" ebenfalls 
fehlschlagen wird (kenne Delphi/Pascal nicht wirklich) und dann den 
Default-Wert zurückliefert.
Wenn dem nicht so ist, müsste man natürlich vorher filtern ;D
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
Gast #2352530
Lesenswert?
• ▲
▼
Sorry, hab mich von
> ...Wenn der String keine Zahl enthält...
blenden lassen.

Deine Aussage:
> "...Die Frage ist, ob der KOMPLETTE String gültig ist, und nicht
>  ob er IRGENDWO eine gültiges Fliesskomma-Literal enthält..."
führt dich aber auch ein bisschen ins weite Feld der Interpretationen.

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