2011-02-10 83 views
36

我想將一個字符串像「$ 45.59」解析爲小數。出於某種原因,我得到的例外是輸入的格式不正確。我不關心所有本地化的東西,因爲這不會是一個全球性的計劃。這是我正在做的。你有沒有看到任何問題?將貨幣文本解析爲十進制類型的問題

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

回答

89

如何使用:

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

Decimal.Parse狀態MSDN文檔:

「s參數是使用NumberStyles.Number風格詮釋這意味着空格和允許使用數千個分隔符,但貨幣符號不是。要顯式定義可以存在於s中的元素(例如貨幣符號,數千個分隔符和空格),請使用Decimal.Parse (字符串,的NumberStyles,的IFormatProvider)方法

+1

如果你仍然想使用'NumberFormatInfo`:`decimal d = decimal.Parse(「$ 45.00」,NumberStyles.Currency,MyNFI);` – 2011-02-10 03:37:56

11

這樣,它爲我的作品:

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

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

1)你必須定義貨幣分離器,而不是數字分隔符。 2.)因爲您只定義了貨幣值,您需要在解析時定義NumberStyles.Currency。