c# - string.Format(..., double) 后跟 double.Parse 使用相同的 NumberFormatInfo 会导致 FormatException。为什么?

标签 c# string double string-parsing string.format

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

请注意,货币值通常用十进制表示比用 double 表示更好。

关于c# - string.Format(..., double) 后跟 double.Parse 使用相同的 NumberFormatInfo 会导致 FormatException。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26442338/

相关文章:

c# - 如何在 C#/.NET 中测试一个值是否被装箱?

c# - 选中复选框时 ASP.NET MVC 更改数据库值

.net - .NET 中小数、浮点和 double 之间的区别?

c++ - 如何在 C++ 中自己将 double 转换为 char[]?

c# - 从数据库中获取未标记的数据

c# - UWP 应用无法解析 .NET Standard 2.0 程序集

java - 我正在尝试比较一个字符串,但是当我让用户输入一个字符串时,它不允许他们

c++ - 解析具有已知变量的字符串中的逻辑表达式

c++ - 运行反向字符串程序时导致停止工作

c++ - 在c++中打印至少一位小数?