我知道,还有其他类似的问题,例如将数字转换为特定于文化的
但是我遇到了困难,即使答案对我也不起作用。仍然得到 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);
Run Code Online (Sandbox Code Playgroud)
您的问题很简单,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);
Run Code Online (Sandbox Code Playgroud)
你可能还需要指定一个文化,因为千位分隔符(如德国的用途取决于文化.
作为千位分隔符)。不变文化使用,
,正如en
:
int result = int.Parse(
"1,111",
NumberStyles.Integer | NumberStyles.AllowThousands,
CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)
如果您允许千位分隔符,它将起作用:
int.Parse("1,111", NumberStyles.AllowThousands, CultureInfo.GetCultureInfo("en"));
// 1111
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
192 次 |
最近记录: |