2011-02-10 84 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。