C# string.Format(…;,double)后跟double.Parse,使用相同的NumberFormatInfo会导致FormatException。为什么?
最后一行抛出一个C# string.Format(…;,double)后跟double.Parse,使用相同的NumberFormatInfo会导致FormatException。为什么?,c#,string,double,string-parsing,string.format,C#,String,Double,String Parsing,String.format,最后一行抛出一个FormatException,我不知道为什么。我试图解析的字符串实际上来自以下内容: NumberFormatInfo nfi = new NumberFormatInfo() { CurrencySymbol = "$$s. ", CurrencyGroupSeparator = ".", CurrencyDecimalSeparator = ",", NegativeSign = "-", CurrencyNegativePatter
FormatException
,我不知道为什么。我试图解析的字符串实际上来自以下内容:
NumberFormatInfo nfi = new NumberFormatInfo()
{
CurrencySymbol = "$$s. ",
CurrencyGroupSeparator = ".",
CurrencyDecimalSeparator = ",",
NegativeSign = "-",
CurrencyNegativePattern = 2
};
double amount = double.Parse("$$s. 1.123,00", nfi);
你没有告诉它应该接受货币价值。为此,您需要调用一个重载,该重载接受一个
NumberStyles
值,并包含NumberStyles.AllowCurrencySymbol
。例如:
String.Format(nfi, "{0:C}", 1123.00)
请注意,货币值通常用decimal
表示比用double
表示更好
using System;
using System.Globalization;
class Test
{
static void Main()
{
NumberFormatInfo nfi = new NumberFormatInfo()
{
CurrencySymbol = "$$s. ",
CurrencyGroupSeparator = ".",
CurrencyDecimalSeparator = ",",
NegativeSign = "-",
CurrencyNegativePattern = 2
};
double d = double.Parse("$$s. 1.123,00",
NumberStyles.Number | NumberStyles.AllowCurrencySymbol,
nfi);
Console.WriteLine(d);
}
}