2017-06-18 7 views
0

39行目を参照して文字列をdoubleに変換できないというエラーメッセージが表示され続けます。コードを見直して、どこにいるのか教えてください。多分、25行目は変数 "R"の2倍にするべきだと思います。C#での変換問題

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace Present_Value 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     //Declare global variables. 
     /* double F = int.Parse(futureTextBox.Text); 
     double R = int.Parse(interestTextBox.Text); 
     double N = int.Parse(sitTextBox.Text);*/ 

     private double CalculateData(int F, int R, int N) 
     { 
      double P = F/(1 + R)*N; 
      return P ; 

     } 



     private void button1_Click(object sender, EventArgs e) 
     { 

      int n = int.Parse(sitTextBox.Text); 
      int f = int.Parse(futureTextBox.Text); 
      int r = double.Parse(intTextBox.Text); 

      presentValuelabel.Text = CalculateData(f,r,n).ToString(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 

     } 

     private void exitButton_Click(object sender, EventArgs e) 
     { 
      //Close this form. 
       this.Close(); 
     } 
    } 
} 
+0

'int'変数を宣言していますが、' double.Parse() 'メソッドで' double'を割り当てようとしています。 'double.Parse()'を 'int.Parse()'に変更してみてください。 – Stradivarius

+0

39行目と25行目はどちらですか?あなたは[mcve]を投稿し、私たちが簡単に答えるようにするべきです。 – Enigmativity

+0

'F /(1 + R)* N'(あなたの質問にあるように)という計算は純粋に整数の計算で計算されていることに注意してください。たとえば、 '(1 /(1 + 2)* 3)'の結果は、整数の計算を使って '0'です。しかし、私がdoubleに変更すると '(1.0 /(1.0 + 2.0)* 3.0)'が '1.0'を返します。 – Enigmativity

答えて

1

編集する方法は2通りあります。

方法1)CalculateData関数を編集する必要があります。 int R =>double R

private double CalculateData(int F, double R, int N) 
{ 
    double P = F/(1 + R) * N; 
    return P; 

} 
private void button1_Click(object sender, EventArgs e) 
    { 

     int n = int.Parse(sitTextBox.Text); 
     int f = int.Parse(futureTextBox.Text); 
     double r = double.Parse(intTextBox.Text); 

     presentValuelabel.Text = CalculateData(f, r, n).ToString(); 
    } 

方法2)あなたはのbutton1_Click機能を編集する必要があります。 double.Parse(intTextBox.Text) =>int.Parse(intTextBox.Text)

private void button1_Click(object sender, EventArgs e) 
{ 

    int n = int.Parse(sitTextBox.Text); 
    int f = int.Parse(futureTextBox.Text); 
    int r = int.Parse(intTextBox.Text); 

    presentValuelabel.Text = CalculateData(f, r, n).ToString(); 
} 

私はそれはあなたを助けることを願っています。

+0

それは絶対に働いた! –

0

テキストボックスからユーザー入力を処理する場合は、.Parse()の代わりに.TryParse()メソッドを使用する必要があります。ユーザーを信頼できません...

また、入力が実数である場合、カルチャはisseです。 3.4または3,4。