首页 > 解决方案 > C# 解析来自不同语言环境的 int

问题描述

我知道,还有其他类似的问题,例如将数字转换为特定于文化的

但是我很难过,即使答案对我也不起作用。仍然收到 System.FormatException:'输入字符串的格式不正确。'

我当前/系统语言环境是 de,我正在解析 en int。到目前为止,无论我尝试过什么(包括以前问题的答案,都行不通。

那么,我错过了什么?


            string numberStr = "1,111"; // one thousand one hundred eleven

            //int result = int.Parse(numberStr);
            //int result = int.Parse(numberStr, CultureInfo.GetCultureInfo("en-US").NumberFormat);
            //int result = int.Parse(numberStr, CultureInfo.InvariantCulture);
            //int result = int.Parse(numberStr, CultureInfo.InvariantCulture.NumberFormat);
            //int result = int.Parse(numberStr, CultureInfo.GetCultureInfo("en-UK").NumberFormat);
            int result = int.Parse(numberStr, CultureInfo.GetCultureInfo("en"));

            Console.WriteLine(result);

标签: c#.net-core

解决方案


您的问题很简单,int.Parse(string)并且int.Parse(string, IFormatProvider)不允许使用千位分隔符。

您可以在文档的备注部分看到这一点:

s参数包含多个形式:

[ws][符号]数字[ws]

但是,您可以使用int.Parse(string, NumberStyles), 重载,它允许您指定NumberStyles.

如果我们查看源代码int.Parse(string),我们可以看到它有效地调用了int.Parse(string, NumberStyles.Integer).

如果您查看文档NumberStyles,我们想要Integer,而且AllowThousands. 我们不想走得太远Number,因为其中包括AllowDecimalPoint,并且整数不能有小数点。

int result = int.Parse("1,111", NumberStyles.Integer | NumberStyles.AllowThousands);

您可能还想指定一种文化,因为千位分隔符取决于文化(例如,德语.用作千位分隔符)。不变文化使用,,如下所示en

int result = int.Parse(
    "1,111", 
    NumberStyles.Integer | NumberStyles.AllowThousands,
    CultureInfo.InvariantCulture);

推荐阅读