2012-10-17 15 views
10

Kiedy próbuję tę linię:float.Parse nie na dziesiętne i przecinkami

float f = float.Parse(val, System.Globalization.NumberStyles.AllowDecimalPoint | System.Globalization.NumberStyles.AllowThousands); 

gdzie val jest ciągiem ustawiona na „5,267” bez cudzysłowów, otrzymuję ten błąd:

FormatException: Nieznany char:. System.Double.Parse (system.string s, NumberStyles styl, dostawca IFormatProvider) System.Single.Parse (system.string s, NumberStyles style)

Więc próbowałem zmienić przecinek przecinek, takich jak: 5267 i mam ten błąd:

FormatException: Unknown: char, System.Double.Parse (system.string s, styl NumberStyles, dostawca IFormatProvider) System.Single.Parse (system.string s, NumberStyles style)

Ja .... nie .... rozumiem. O ile mogę powiedzieć, że robię to dobrze. To prosta sprawa, więc dlaczego sprawia mi to żal?

+1

Dlaczego nie po prostu zrobić 'float.Parse (yourValue);'? Po prostu go uruchomiłem i nie mam błędów z przecinkami lub przecinka dziesiętnego – mlorbetske

+1

'NumberStyles.Any' działa dobrze dla mnie, czy próbowałeś? – Adam

+0

Czy to możliwe, że ani '.', ani', 'nie są separatorem dziesiętnym czy separatorem tysięcy w twojej obecnej kulturze? –

Odpowiedz

11

Parsowanie ma świadomość kulturową. Jeśli lokalna kultura ma inne wymagania, możesz przekazać kulturę lub innego dostawcę formatu. Spróbuj użyć CultureInfo.InvariantCulture. Jeśli nie, nie będziesz potrzebować opcji dziesiętnej.

float f = float.Parse(val, 
         System.Globalization.NumberStyles.AllowThousands, 
         CultureInfo.InvariantCulture); 
+1

To jest ten - potrzebowałem InvariantCulture. Dzięki Matt. – damocles

+0

Oto odpowiedź, której szukałem! Dzięki! –

Powiązane problemy