2011-02-10 10 views
36

Próbuję przeanalizować ciąg znaków, jak "45.59" w postaci dziesiętnej. Z jakiegoś powodu otrzymuję wyjątek, że dane wejściowe nie miały poprawnego formatu. Nie interesują mnie wszystkie rzeczy związane z lokalizacją, ponieważ nie będzie to program globalny. Oto, co robię. Czy widzisz jakieś problemy?Problem podczas analizowania tekstu waluty na typ dziesiętny

NumberFormatInfo MyNFI = new NumberFormatInfo(); 
MyNFI.NegativeSign = "-"; 
MyNFI.NumberDecimalSeparator = "."; 
MyNFI.NumberGroupSeparator = ","; 
MyNFI.CurrencySymbol = "$"; 
decimal d = decimal.Parse("$45.00", MyNFI); // throws exception here... 

Odpowiedz

89

Jak o użyciu:

decimal d = decimal.Parse("$45.00", NumberStyles.Currency); 

dokumentacji MSDN na Decimal.Parse stanach.

„S parametr jest interpretowany przy użyciu stylu NumberStyles.Number Oznacza to, że przestrzeń i biały separatory tysięcy są dozwolone, ale symbole walut nie są. Aby wyraźnie zdefiniować elementy (takie jak symbole walut, separatory tysięcy i białe znaki), które mogą być obecne w s, użyj parametru Dziesiętny. (String, NumberStyles, IFormatProvider) Metoda

+1

A jeśli nadal chcesz użyć 'NumerFormatInfo':' decimal d = decimal.Parse ("$ 45.00", NumberStyles.Currency, MyNFI); ' –

+1

To naprawiło to. Po prostu chciałbym zrozumieć, dlaczego moje pierwsze podejście nie działa ... – PICyourBrain

+1

Dokumentacja MSDN na Decimal.Parse stwierdza: "Parametr s jest interpretowany za pomocą stylu NumberStyles.Number. Oznacza to, że białe spacje i separatory tysięcy są dozwolone, ale symbole walut nie są. Aby wyraźnie zdefiniować elementy (takie jak symbole walut, separatory tysięcy i białe znaki), które mogą występować w s, użyj metody Decimal.Parse (String, NumberStyles, IFormatProvider). " –

11

ten sposób to działa na mnie:

NumberFormatInfo MyNFI = new NumberFormatInfo(); 
MyNFI.NegativeSign = "-"; 
MyNFI.CurrencyDecimalSeparator = "."; 
MyNFI.CurrencyGroupSeparator = ","; 
MyNFI.CurrencySymbol = "$"; 

decimal d = decimal.Parse("$45.00", NumberStyles.Currency, MyNFI); 

1.) Trzeba ustawić separator waluty zamiast separatora liczb. 2.) Ponieważ zdefiniowano tylko wartości walutowe, należy zdefiniować NumberStyles.Currency podczas analizowania.

Powiązane problemy