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);
    }
}