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
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
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...
Ich würde ein Regex definieren und schauen ob der auf den String match.
Hallo Ich werde mal versuchen was für mich die beste Lösung ist. Danke für euere Hilfe Gruss Kill Blinton
NurMalSo schrieb: > Ich würde ein Regex definieren und schauen ob der auf den String match. Dann weisst Du erst mal nur, dass der String das richtige Format hat, umgewandelt ist er noch lange nicht. bluppdidupp schrieb: > http://msdn.microsoft.com/en-us/library/26sxas5t.aspx Hier steht drin, wie es geht... Gruß MarkusM
...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
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
@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
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.
NurMalSo schrieb: > führt dich aber auch ein bisschen ins weite Feld der Interpretationen. Wie immer, wenn es darum geht, Pflichtenhefte/Anforderungen umzusetzen... ;-) Gruß Markus
Markus V. schrieb: > NurMalSo schrieb: >> führt dich aber auch ein bisschen ins weite Feld der Interpretationen. > > Wie immer, wenn es darum geht, Pflichtenhefte/Anforderungen > umzusetzen... ;-) Oder die Anforderungen nicht klar genug dargestellt sind...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.