2017-06-01 11 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

は 'secondpressednumber場合に例外がスローされます注意し、' 'Math.expの(secondpressednumber.Value)を試してみてください'が' null'なので、最初にそれをチェックしてください。 – juharr

+0

@ChristopherKyleHortonなぜ私はその提案をしたのか理由を知っています。 – juharr

+0

@ChristopherKyleHorton 'secondpressednumber.Value'は' secondpressednumber'がnullの場合に例外をスローします。 'double?'を 'Math.Exp'に渡した場合ではありません。 – juharr

答えて

2

あなたのダブルが真

2
場合、それは doubleVarName.HasValueを使用して値が、あなたのメソッドに値を渡すしている場合は、その値にアクセスしたい場合は、 doubleVarName.Value

を試してみてくださいあなたがチェックすることができNULL可能

です

Math.Expは、パラメータとしてdoubleを想定しています。つまり、null可能な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()); 
関連する問題