繁体   English   中英

string.Format(…,double),然后是double.Parse,使用相同的NumberFormatInfo会导致FormatException。 为什么?

[英]string.Format(…, double) followed by double.Parse using same NumberFormatInfo results in FormatException. Why?

NumberFormatInfo nfi = new NumberFormatInfo()
{
    CurrencySymbol = "$$s. ",
    CurrencyGroupSeparator = ".",
    CurrencyDecimalSeparator = ",",
    NegativeSign = "-",
    CurrencyNegativePattern = 2
};

double amount = double.Parse("$$s. 1.123,00", nfi);

最后一行抛出FormatException ,我不知道为什么。 我要解析的字符串实际上来自于此:

String.Format(nfi, "{0:C}", 1123.00)

您没有告诉它应该接受货币值。 为此,您需要调用一个接受NumberStyles值并包含NumberStyles.AllowCurrencySymbol的重载。 例如:

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

注意,货币值通常最好用decimal不是double精度表示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM