将带逗号的字符串转换为double

时间:2015-11-24 14:48:13

标签: c# converter

我有一个这样的字符串:99 365 25,633 gghddhdf 35

我需要数组中的所有数字。我的问题是如何处理25,633因为','。我怎么能得到这个数字呢?我的代码是:

public string campDiff(string lineStr1, string lineStr2)
{
    int size;
    string sum = null;
    double num1;
    double num2;
    double number;

    string[] lineArr1 = lineStr1.Split(' '); ;
    string[] lineArr2 = lineStr2.Split(' ');

    if (lineArr1.Length > lineArr2.Length)
    {
        size = lineArr1.Length;
    }
    else
    {
        size = lineArr2.Length;
    }

    for (int i = 0; i < size; i++)
    {

        if (Double.TryParse(lineArr1[i], out num1))
        {


            if (Double.TryParse(lineArr2[i], out num2))
            {

                number = num2 - num1;
                if (number > 0)
                {
                    sum = Convert.ToString(number);
                    return sum;
                }
            }
        }
    }
    return sum;
}

但它用逗号跳过了号码。

4 个答案:

答案 0 :(得分:2)

有很多可能的解决方案。虽然,我认为最好的是将CultureInfo设置为Invariant,然后用点替换所有逗号。例如:

Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
string number = "3,2";
double d = double.Parse(number.Replace(",", "."));
Console.WriteLine(d);

在你的代码中会这样:

    double[] numbers1 = 
        lineStr1.Replace(",", ".")
                    .Split(new char[0], StringSplitOptions.RemoveEmptyEntries)
                    .Select(s =>
                    {
                        double value;
                        bool success = double.TryParse(s, NumberStyles.Any, CultureInfo.InvariantCulture, out value);

                        return new { value, success };
                    })
                    .Where(p => p.success)
                    .Select(p => p.value)
                    .ToArray();

    double[] numbers2 = 
        lineStr2.Replace(",", ".")
                    .Split(new char[0], StringSplitOptions.RemoveEmptyEntries)
                    .Select(s =>
                    {
                        double value;
                        bool success = double.TryParse(s, NumberStyles.Any, CultureInfo.InvariantCulture, out value);

                        return new { value, success };
                    })
                    .Where(p => p.success)
                    .Select(p => p.value)
                    .ToArray();

现在您有两个数组 numbers1和numbers2 ,其中所有可能的数字都来自两个字符串 lineStr1和lineStr2 。您决定如何处理它们,因为我无法完全理解您的方法的目的。

感谢评论中的所有人让我编辑我的答案。

答案 1 :(得分:1)

我假设您的字符串中只有 一个包含,的字符串,然后您可以使用空格分割字符串,获取包含该字符的项目,然后将其解析为{ {1}}文化的doubleNumberDecimalSeparator类似(,)。

tr-TR

我使用var str = "99 365 25,633 gghddhdf 35"; var element = str.Split(' ').Where(s => s.Contains(',')).ToArray()[0]; double d = double.Parse(element, CultureInfo.GetCultureInfo("tr-TR")); ,因为这是我目前的文化。您可以Clone tr-TR CurrentCultureNumberDecimalSeparator属性设置为,,如果不是。

答案 2 :(得分:0)

在执行sub。

之前,只需检查当前lineArrX IsLetter
public class IsLetterSample {
public static void Main() {
    char ch = '8';

    Console.WriteLine(Char.IsLetter(ch));                   // False
    Console.WriteLine(Char.IsLetter("sample string", 7));   // True
}

答案 3 :(得分:0)

你可以首先使用正则表达式

 Regex.Replace(input, "[^0-9]+", string.Empty);