如果值为null或为空,则转换为double失败

时间:2016-02-11 20:02:34

标签: c#

我编写了一个将字符串转换为double的方法,这里是代码

public double convertToDouble(string number)
{
    string temp = number;
    if (number.Contains("x"))
    {
        int locationE = number.IndexOf("x");
        string exponent = number.Substring(locationE + 5, number.Length - (locationE + 5));
        temp = number.Substring(0, locationE - 1) + "E" + exponent;
    }

    return Convert.ToDouble(temp);
}

但是如果临时变量作为null或空字符串传入,则转换将失败。我怎么能写这部分。

2 个答案:

答案 0 :(得分:4)

为什么要为此目的编写新方法,而您可以使用最安全的方法double.TryParse

double number;

// The numberStr is the string you want to parse
if(double.TryParse(numberStr, out number))
{
    // The parsing succeeded.
}

如果您不喜欢上述方法,并且想要坚持使用您的方法,那么我看到的唯一选择是抛出异常。

public double convertToDouble(string number)
{
    if(string.IsNullOrWhiteSpace(number))
    {
        throw new ArgumentException("The input cannot be null, empty string or consisted only of of white space characters", "number");
    }

    string temp = number;
    if (number.Contains("x"))
    {
        int locationE = number.IndexOf("x");
        string exponent = number.Substring(locationE + 5, number.Length - (locationE + 5));
        temp = number.Substring(0, locationE - 1) + "E" + exponent;
    }
    return Convert.ToDouble(temp);
}

答案 1 :(得分:2)

取决于无法转换数字时您想要发生什么。

你可以试试这个:

[-4]

作为进一步的提示,看起来您正在将public double convertToDouble(string number) { string temp = number; if (number.Contains("x")) { int locationE = number.IndexOf("x"); string exponent = number.Substring(locationE + 5, number.Length - (locationE + 5)); temp = number.Substring(0, locationE - 1) + "E" + exponent; } double returnDouble; if(double.TryParse(temp, out returnDouble)) return returnDouble; // Return whatever or throw an exception, etc. return 0; } 转换为[number] x 10^[exponent],如果是这样,可以轻松转换为:

[number]E[exponent]

这可以在不损害可读性的情况下进一步美化,但我会把它留给你