我如何转换成双倍?加倍。 Math.Sqrt运算

时间:2019-03-10 14:02:14

标签: c#

我想在这个问题的下面寻求代码的帮助...我遇到一些错误,提示“参数1:不能将double转换为double?”。我该如何解决这个问题呢?

private void Calculate(string newOperator = null)
    {
        double? result = null;
        double? first = numbers[0] == null ? null : (double?)double.Parse(numbers[0]);
        double? second = numbers[1] == null ? null : (double?)double.Parse(numbers[1]);

        switch (@operator)
        {
            case "÷":
                result = first / second;
                break;
            case "×":
                result = first * second;
                break;
            case "+":
                result = first + second;
                break;
            case "-":
                result = first - second;
                break;
            case "√":
                result = Math.Sqrt(first);
                break;
            case "SIN":
                result = Math.Sin(first);
                break;
            case "COS":
                result = Math.Cos(first);
                break;
            case "TAN":
                result = Math.Tan(first);
                break;
        }

2 个答案:

答案 0 :(得分:1)

如果这就是您的意思,则可以使用.Value访问可为null的类型的值。

例如Math.Sqrt(first.Value)


编辑:

我不认为需要这么说,但是由于评论员的敦促,我将其添加:

由于可为空的类型可以为空,因此您应该检查您的double类型吗?在使用它之前实际上有一个值。

例如,first.HasValue将返回一个布尔值,告诉您是否可以为null的值。

答案 1 :(得分:-1)

您可以像这样将double?转换为double

double ConvertNullableDoubleToDouble(double? input)
{
    return input.Value;
}

这有点混乱,因为输入可能是null。确实,您应该做的是添加一个默认值或使它超显式处理空值的内容。

private static double ConvertNullableDoubleToDouble(double? input, double? defaultIfNull = null)
{
  if (input != null && input.HasValue)
    return input.Value;
  else if (defaultIfNull != null && defaultIfNull.HasValue)
    return defaultIfNull.Value;
  else
    throw new Exception(string.Format($"Unable to parse input {input}"));
}