c# - 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);
解决方案
您的问题很简单,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);
推荐阅读
- javascript - Node.js 缓存来自类对象内部方法的请求数据
- python - 删除元组中元组列表中的括号
- python - 去除彼此靠近的二维点
- python - 从列表中的列表中分离出数据的最有效方法
- javascript - 如何访问javascript文件中的剃刀变量?
- php - 有没有办法让我的 laravel 项目使用表单中的 https 就像路由一样
- python - 使用重写的保存方法同步 Django 模型
- objective-c - 那么在apple TV 4k Gen 2上检测新的后退按钮的方法是什么
- reactjs - React 测试库 - “messageParent”只能在工作人员内部使用
- javascript - 反应打字稿组件意外的令牌,预期的“{”