2016-07-25 60 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」,但它應該是一些數字。當win winCounter是1,lossCounter是1時,它應該插入1 /(1 + 1)= 0.5,但它表示「0」。我嘗試了我所知道的一切,所以請給我一個小費。爲什麼WinForms中的textBox不能顯示double?

+4

這與Windows Forms無關。您會在約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

感謝這一個作品,我會檢查其他人 –

+0

@RicGaudet - 是的,要麼工作。你只需要投一邊告訴編譯器這是浮點運算。 – ChrisF

0

如評論中所述,您將需要cast您的結果。這應該工作:

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

投射結果仍然會導致整數運算。你需要在分組之前進行*。 – ChrisF

+0

@ChrisF權利。感謝您指出:) –

相關問題