将货币文本解析为十进制类型的问题

PIC*_*ain 48 c# parsing decimal number-formatting

我试图将像"$ 45.59"这样的字符串解析为小数.出于某种原因,我得到的例外是输入格式不正确.我并不关心所有本地化的东西,因为这不是一个全球性的计划.这就是我在做的事情.你看到有什么问题吗?

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

Joh*_*ner 102

如何使用:

decimal d = decimal.Parse("$45.00", NumberStyles.Currency);
Run Code Online (Sandbox Code Playgroud)

Decimal.Parse上的MSDN文档说明:

"使用NumberStyles.Number样式解释s参数.这意味着允许使用空格和千位分隔符,但不允许使用货币符号.要明确定义可以使用的元素(如货币符号,千位分隔符和空格)在s中,使用Decimal.Parse(String,NumberStyles,IFormatProvider)方法

  • 如果你仍然想使用你的 `NumberFormatInfo`:`decimal d = decimal.Parse("$45.00", NumberStyles.Currency, MyNFI);` (3认同)
  • 修好了.我只是希望我理解为什么我的第一种方法不起作用...... (2认同)

小智 14

这样它对我有用:

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

decimal d = decimal.Parse("$45.00", NumberStyles.Currency, MyNFI);
Run Code Online (Sandbox Code Playgroud)

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