2016-07-25 4 views
0
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 P2_7_24_2016_ED_app 
{ 
    public partial class Form1 : Form 
    { 
     int win; 
     int loss; 
     int winCounter; 
     int lossCounter; 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void buttonWin_Click(object sender, EventArgs e) 
     { 
      this.textBoxWin.Text = ""; 
      ++win; 
      ++winCounter; 
      this.textBoxWin.Text = win.ToString(); 
     } 

     private void buttonLoss_Click(object sender, EventArgs e) 
     { 
      this.textBoxLoss.Text = ""; 
      ++loss; 
      ++lossCounter; 
      this.textBoxLoss.Text = loss.ToString(); 
     } 

     private void buttonRate_Click(object sender, EventArgs e) 
     { 
      textBox1.Text = ""; 
      double result = winCounter/(winCounter + lossCounter); 
      textBox1.Text = result.ToString(); 
     } 
    } 
} 

これはWindowsフォームアプリケーションのコードなので、私はすべてを説明するつもりはありません。 問題は最後にtextBox1.Text = result.ToString(); が "0"を表示していますが、いくつかの数字にする必要があります。 winCounter winCounterが1のようなもので、lossCounterが1の場合、1 /(1 + 1)= 0.5を挿入する必要がありますが、 "0"と表示されます。私は知っているすべてを試しましたので、私にヒントを与えてください。なぜWinFormsのtextBoxがダブル表示できないのですか?

+4

これはWindowsフォームとは関係ありません。コンソールアプリケーションでは、まったく同じ結果が約5行で表示されます。ヒント: 'winCounter'と' lossCounter'は両方とも整数です。 1 /(1 + 1)= 0である。 –

+0

二倍の配当を行います。 –

+0

私は二重の結果でそれを保存しようとしましたが、それでも "0"を表示します –

答えて

1

を。これは、整数演算である:

(winCounter/(winCounter+lossCounter)) 

結果は、あなたが期待するものであることを行っていません。除算を行う前に、浮動小数点型(必要な速さ/精度に応じて、ダブルまたは小数フロート)へ

キャストwinCounter(winCounter+lossCounter)次のいずれか

(winCounter/(decimal)(winCounter+lossCounter)) 

または

((double)winCounter/(winCounter+lossCounter)) 

とあなたはあなたが期待している結果を得るでしょう。

+0

この1つの作品に感謝、私は他の人をチェックします –

+0

@RicGaudet - はい、いずれか動作します。これが浮動小数点演算であることをコンパイラに伝えるには、ちょうど片側をキャストする必要があります。 – ChrisF

0

コメントに記載されているとおり、castの結果が必要です。これは動作するはずです:

textBox1.Text = (winCounter/(double)(winCounter+lossCounter)).ToString(); 
+2

結果をキャストすると、整数演算が行われます。あなたは*部門を行う前に*キャストする必要があります。 – ChrisF

+0

@ChrisF権利。それを指摘してくれてありがとう:) –

関連する問題