2011-06-28 13 views
7

Dlaczego double.TryParse() z tych ustawień nie analizowaćParsing numery z double.TryParse dziwne zachowanie

double.TryParse("1.035,00", 
NumberStyles.AllowCurrencySymbol | NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite | 
NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, 
GlobalSettings.Instance.DefaultCulture, out price); 

gdzie DefaultCulture jest sl-SI (słoweński), który ma kropki . jako symbol grupowania cyfr, a jako separator dziesiętny . Po analizie składowej pozostaje 0.

?

+0

TryParse zwraca 'bool' wskazującą, czy parsowania wartości udało, czy nie. Dla twojego przykładu, TryParse zwraca 'false'. Tak więc przyczyną 'price' jest' 0' jest to, że nie można przeanalizować łańcucha. – dtb

+3

Uważam za dziwne, że niektórzy będą głosować blisko ze względu na lokalizację. Jeśli problemem byłaby kultura, to wpłynęłoby to na wiele kultur, wszystkie te, które używały przecinka jako separatora dziesiętnego, który jest zarówno standardem ISO, jak i reprezentacją używaną w większości krajów –

Odpowiedz

6

Brakuje NumberStyles.AllowThousands:

double.TryParse("1.035,00", NumberStyles.AllowCurrencySymbol | 
          NumberStyles.AllowLeadingWhite | 
          NumberStyles.AllowTrailingWhite | 
          NumberStyles.AllowDecimalPoint | 
          NumberStyles.AllowLeadingSign | 
          NumberStyles.AllowThousands, 
          GlobalSettings.Instance.DefaultCulture, out price); 
+0

doskonały, dzięki – mare

2

ten pracował dla mnie

double.TryParse("1.035,00", 
NumberStyles.Any, 
GlobalSettings.Instance.DefaultCulture, out price); 
+0

, ktokolwiek inny doradziłby przy użyciu NumberStyles.Any w sens, jeśli istnieją potencjalne problemy z tym? – mare

+1

Zgodnie z MSDN ** Wskazuje, że używane są wszystkie style z wyjątkiem AllowHexSpecifier. Jest to styl złożonego numeru. ** – V4Vendetta