我正在尝试将像“$ 45.59”这样的字符串解析为小数。出于某种原因,我得到的例外是输入格式不正确。我并不关心所有本地化的东西,因为这不是一个全球性的计划。这就是我在做的事情。你看到有什么问题吗?
NumberFormatInfo MyNFI = new NumberFormatInfo();
MyNFI.NegativeSign = "-";
MyNFI.NumberDecimalSeparator = ".";
MyNFI.NumberGroupSeparator = ",";
MyNFI.CurrencySymbol = "$";
decimal d = decimal.Parse("$45.00", MyNFI); // throws exception here...
答案 0 :(得分:99)
如何使用:
decimal d = decimal.Parse("$45.00", NumberStyles.Currency);
Decimal.Parse上的MSDN文档声明:
“使用NumberStyles.Number样式解释s参数。这意味着允许使用空格和千位分隔符,但不允许使用货币符号。要明确定义元素(例如货币符号,千位分隔符和空格)可以出现在s中,使用Decimal.Parse(String,NumberStyles,IFormatProvider)方法
答案 1 :(得分:14)
这种方式对我有用:
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。
答案 2 :(得分:0)
当我尝试从@JohnKoerner运行代码时,它将失败并出现以下异常:
System.FormatException
,并显示消息:"Input string was not in a correct format."
。 @MEN的答案很有帮助,但我想对接受的答案以及如何解决该问题添加一些其他见解。
就像@MEN一样,在NumberFormatInfo
方法正常工作之前,我必须添加.Parse()
。但是,对于我来说,不需要用CurrencyDecimalSeparator
指定小数。您必须包括数字所需的所有属性。这是类定义文档中的列表:
MSDN Docs - NumberFormatInfo Class
在我的实现中,我永远不会得到负数,所以我选择不包括负数。这是我所拥有的:
string currencyAmount = "$45.00";
NumberFormatInfo FormatInfo = new NumberFormatInfo();
FormatInfo.CurrencyGroupSeparator = ",";
FormatInfo.CurrencySymbol = "$";
// Result: 45.00
decimal parsedCurrency = decimal.Parse(currencyAmount, NumberStyles.Currency, FormatInfo);