如果值为 null 或空,则转换为双精度失败

本文关键字:转换 双精度 失败 或空 null 如果 | 更新日期: 2023-09-27 18:34:24

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

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 或空字符串传入,则转换将失败。我怎么能写这部分。

如果值为 null 或空,则转换为双精度失败

为什么你想为此目的编写一个新方法,而你可以使用更安全的方法,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);
}

取决于当数字无法转换时您希望发生什么。

你可以试试这个:

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] ,如果是这样,这可以很容易地转换为:

public double convertToDouble(string number)
{
    if(String.IsNullOrWhiteSpace(number)) 
       return 0; // or throw exception, or whatever
    // Instead of all those "IndexOf" and "Substrings"
    var temp = number.Replace("x 10^", "E");
    double returnDouble;
    if(double.TryParse(temp, out returnDouble))
      return returnDouble;
    // Return whatever or throw an exception, etc.
    return 0;
}

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