2016-07-25 59 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权利。感谢您指出:) –

相关问题