0

这是一个List< 字符串 > lstA

lstA可能包含值(数据类型字符串),例如: 第一个示例

1

1.00

1000.01

1,002.98

…………

或者listA可能包含如下值:第二个示例

1

1,00

1000,01

1.002,98

…………

我正在尝试将此列表传递给一个方法,它会返回一个字符串“german”或“us”

我正在尝试这个:

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

对于前 3 个值,这可以正常工作。但是当我得到(1,002.98)或(“1.002,98”)时,这两个都符合德国条件。

如何解决这个问题?全球化阶级能轻易地发现它是哪种文化吗?lstA的给定示例确实是随机的。但它将作为第一个示例第二个示例。

4

3 回答 3

0

如果您尝试仅解析几种文化的数量,您可能会发现使用带有文化格式参数的 double.parse 会很有用。请参阅具有文化格式的双重解析

于 2013-03-25T13:49:39.230 回答
0

您不能明确地创建一个方法,给定一组字符串将能够告诉您字符串的格式是英语还是德语。您可以编写一个方法来告诉您是否可以将所有字符串解析为英语或德语。由于您预计解析失败,因此您应该使用Double.TryParse,如下所示:

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

采用显式输入而不是依赖启发式总是更好,所以如果有任何方法可以强制标准数字表示,你会更好。

于 2013-03-25T16:53:35.083 回答
0

您可以尝试使用两种文化来解析它们,

例如,

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; ;
}
于 2017-09-21T05:08:30.713 回答