2017-06-01 33 views
1

我目前正在研究一個學校項目的計算器。 我需要一個指數函數,但不知道如何。我得到這個錯誤:C#計算器exponet函數。怎麼樣?

Argument 1: cannot convert from 'double?' to 'double'

我的一些代碼。

namespace Lommeregner 
{ 
    public partial class Lommeregner : Form 
    { 
     double? firstpressednumber; 
     double sum; 
     double? secondpressednumber = null; 
     string operationclicked; 

     onscreenShower _onscreenShower = new onscreenShower(); 

我的指數:

private void btn_exponent_Click(object sender, EventArgs e) 
     { 
      screen_text.Text = _onscreenShower.DisplayOnScreen(Math.Exp(secondpressednumber).ToString(), screen_text.Text.ToString()); 
     } 

我等於代碼。

private void btn_equal_Click(object sender, EventArgs e) 
     { 
      if(screen_text.ToString().Length>0) 
      { 
       switch(operationclicked) 
       { 
        case "+": 
         secondpressednumber = double.Parse(screen_text.Text.ToString()); 
         sum = double.Parse((firstpressednumber + secondpressednumber).ToString()); 
         firstpressednumber = double.Parse(screen_text.Text.ToString()); 

         screen_text.Text = sum.ToString(); 
         break; 

        case "-": 
         secondpressednumber = double.Parse(screen_text.Text.ToString()); 
         sum = double.Parse((firstpressednumber - secondpressednumber).ToString()); 
         firstpressednumber = double.Parse(screen_text.Text.ToString()); 

         screen_text.Text = sum.ToString(); 
         break; 

        case "*": 
         secondpressednumber = double.Parse(screen_text.Text.ToString()); 
         sum = double.Parse((firstpressednumber * secondpressednumber).ToString()); 
         firstpressednumber = double.Parse(screen_text.Text.ToString()); 

         screen_text.Text = sum.ToString(); 
         break; 

        case "/": 
         secondpressednumber = double.Parse(screen_text.Text.ToString()); 
         sum = double.Parse((firstpressednumber/secondpressednumber).ToString()); 
         firstpressednumber = double.Parse(screen_text.Text.ToString()); 

         screen_text.Text = sum.ToString(); 
         break; 
       } 
      } 
     } 

希望你們能幫忙。

+0

嘗試'Math.Exp(secondpressednumber.Value)',注意它會拋出一個異常,如果'secondpressednumber '是'null'因此可能先檢查一下。 – juharr

+0

@ChristopherKyleHorton我知道原因,所以我提出了這個建議。 – juharr

+0

@ChristopherKyleHorton我的意思是'secondpressednumber.Value'會拋出一個異常,如果'secondpressednumber'爲null,而不是如果你傳遞'double?'到'Math.Exp'。 – juharr

回答

2

你雙是可空

如果您要訪問它的價值,嘗試doubleVarName.Value

您可以檢查是否有使用doubleVarName.HasValue然後傳遞價值,你的方法是否真值

2

Math.Exp預計double作爲參數 - 你(試圖)通過它一個可爲空的雙(double?)。

您至少要在.Value,但你幾乎可以肯定應該檢查的值存在第一:

if(!secondpressednumber.HasValue) 
    throw new InvalidOperationException("No value"); 
screen_text.Text = _onscreenShower.DisplayOnScreen(Math.Exp(secondpressednumber.Value).ToString(), screen_text.Text.ToString());