C# 从具有数值的字符串中检测区域性信息
这里是一个列表C# 从具有数值的字符串中检测区域性信息,c#,globalization,cultureinfo,C#,Globalization,Cultureinfo,这里是一个列表lstA lstA可能包含值(数据类型字符串),如: 第一个示例 一, 1.00 1000.01 1002.98 或者listA可能包含如下值:2nd example 一, 1,00 1000,01 1.002,98 我试图将此列表传递给一个方法,它将返回字符串“german”或“us” 我正在尝试: private static string ReturnCulture(List<string> lst) { string cull = "
private static string ReturnCulture(List<string> lst)
{
string cull = "";
foreach (string s in lst)
{
if (s.Contains(".") && s.Contains(","))
{
cull = "german";
break;
}
else if (!s.Contains(".") && s.Contains(","))
{
cull = "german";
}
else if (s.Contains(".") && !s.Contains(","))
{
cull = "us";
break;
}
else if (!s.Contains(".") && !s.Contains(","))
{
continue;
}
}
return cull;
}
私有静态字符串ReturnCulture(列表lst)
{
字符串消隐=”;
foreach(lst中的字符串s)
{
如果(s.Contains(“.”)和&s.Contains(“,”)
{
cull=“德语”;
打破
}
如果(!s.Contains(“.”)和&s.Contains(“,”),则为else
{
cull=“德语”;
}
如果(s.Contains(“.”)和&!s.Contains(“,”)
{
cull=“us”;
打破
}
如果(!s.Contains(“.”)&!s.Contains(“,”),则为else
{
继续;
}
}
返回剔除;
}
对于前3个值,此操作效果良好。但当我得到(1002.98)或(“1.002,98”)时,这两种情况都适用于德国条件
如何解决这个问题?全球化课程能很容易地检测出它是哪种文化吗?lstA的给定示例是真正随机的。但是,如果您试图只解析多个区域性的数字,则它将作为第一个示例或第二个示例,可能您会发现使用double.parse with culture format参数是有用的。请参见您无法最终创建一种方法,即给定一组字符串将能够告诉您字符串的格式是英语还是德语。您可以编写一个方法,该方法将告诉您是否可以将所有字符串解析为英语或德语。由于您预期解析会失败,因此应在中使用as:
private static bool areallstringsvalidnumberrepresentationsforculture(文化信息ci,列表lst)
{
foreach(lst中的字符串s)
{
双数;
if(!Double.TryParse(s,NumberStyles.Any,ci,out number)
{
返回false;
}
}
返回true;
}
最好采用显式输入,而不是依赖启发式,因此如果有任何方法强制使用标准数字表示,您最好使用。您可以尝试使用这两种文化来解析它们 例如
当两种文化共享相同的符号时会发生什么?我必须在这里考虑两种符号.在我最后的第五行中,我澄清了我担心的问题。你的最终目标是什么?为什么你需要将数字解析为文化?我必须用这个列表的值进行一些计算,我必须用德语格式进行计算。但是输入并不总是用德语。因此,我建议你将帖子改为“我如何解析来自不同文化背景的数字”-因为当你收到不变的数字时,你可以很容易地将它们格式化为德语。
private static bool AreAllStringsValidNumberRepresenationsForCulture(CultureInfo ci, List<string> lst)
{
foreach (string s in lst)
{
double number;
if (!Double.TryParse(s, NumberStyles.Any, ci, out number)
{
return false;
}
}
return true;
}
public static string GetCulture(this string value)
{
var doubleValue = default(double);
var germanCultureInfo = new CultureInfo("de-DE");
var englishCultureInfo = new CultureInfo("en-US");
if (double.TryParse(value, NumberStyles.AllowDecimalPoint, germanCultureInfo, out doubleValue))
{
return "german";
}
else if (double.TryParse(value, NumberStyles.AllowDecimalPoint, englishCultureInfo, out doubleValue))
{
return "us";
}
return string.Empty; ;
}