问题parsing货币文本为十进制types

我试图parsing一个string像“$ 45.59”到十进制。 出于某种原因,我得到的例外是input的格式不正确。 我不关心所有的本地化的东西,因为这不会是一个全球性的计划。 这是我正在做的。 你有什么问题吗?

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

如何使用:

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

Decimal.Parse上的MSDN文档指出:

“s参数是使用NumberStyles.Number风格解释的,这意味着可以使用空格和数千个分隔符,但是货币符号不是,要显式地定义可以使用的元素(例如货币符号,数千个分隔符和空格)在s中使用Decimal.Parse(String,NumberStyles,IFormatProvider)方法

这样它适用于我:

 NumberFormatInfo MyNFI = new NumberFormatInfo(); MyNFI.NegativeSign = "-"; MyNFI.CurrencyDecimalSeparator = "."; MyNFI.CurrencyGroupSeparator = ","; MyNFI.CurrencySymbol = "$"; decimal d = decimal.Parse("$45.00", NumberStyles.Currency, MyNFI); 

1.)您必须定义货币分隔符而不是数字分隔符。 2)因为你只定义了货币值,你需要在parsing时定义NumberStyles.Currency。