2011-02-10 12 views
36

Sto cercando di analizzare una stringa come "$ 45,59" in un decimale. Per qualche motivo, ricevo un'eccezione sul fatto che l'input non era nel formato corretto. Non mi interessa di tutto il materiale di localizzazione perché non sarà un programma globale. Ecco cosa sto facendo. Vedi qualche problema?Problema che analizza il testo di valuta nel tipo decimale

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

risposta

89

Come sull'utilizzo:

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

La documentazione MSDN su Decimal.Parse stati:.

"Il parametro di s viene interpretato utilizzando lo stile NumberStyles.Number Ciò significa che lo spazio bianco e sono consentiti i separatori di migliaia, ma i simboli di valuta no. Per definire esplicitamente gli elementi (come simboli di valuta, separatori di migliaia e spazi bianchi) che possono essere presenti in s, utilizzare Decimal.Parse (String, NumberStyles, IFormatProvider) Metodo

+1

E se si desidera utilizzare ancora il proprio 'NumberFormatInfo':' decimal d = decimal.Parse ("$ 45.00", NumberStyles.Currency, MyNFI); ' –

+1

L'ha risolto. Vorrei solo capire perché il mio primo approccio non ha funzionato ... – PICyourBrain

+1

La documentazione MSDN sugli stati Decimal.Parse: "Il parametro s viene interpretato usando lo stile NumberStyles.Number. Ciò significa che lo spazio bianco e i separatori di migliaia sono consentiti ma i simboli di valuta non lo sono Per definire esplicitamente gli elementi (come i simboli di valuta, i separatori di migliaia e lo spazio bianco) che possono essere presenti in s, utilizzare il metodo Decimal.Parse (String, NumberStyles, IFormatProvider). " –

11

In questo modo funziona per me:

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

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

1.) È necessario definire il separatore di valuta invece del separatore numero. 2.) Poiché sono stati definiti solo i valori di valuta, è necessario definire NumberStyles.Currency durante l'analisi.

Problemi correlati