【问题标题】:Why textBox in WinForms cant display double?为什么 WinForms 中的 textBox 不能显示双精度?
【发布时间】:2016-07-25 20:08:15
【问题描述】:
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”。我尝试了我所知道的一切,所以请给我一个提示。

【问题讨论】:

  • 这与 Windows 窗体无关。您会在大约 5 行的控制台应用程序中看到完全相同的结果。提示:winCounterlossCounter 都是整数。 1/(1+1) = 0 当使用整数运算时。
  • 将股息翻倍。
  • 我尝试将它保存在双重结果中,但它仍然显示“0”
  • 您需要将等式的一部分转换为浮点类型分配它或转换为字符串。
  • 我编辑了添加双重结果的代码。它仍然显示“0”

标签: c# windows forms types windows-forms-designer


【解决方案1】:

这是整数运算:

(winCounter/(winCounter+lossCounter))

结果不会是你所期望的。

在进行除法之前将winCounter(winCounter+lossCounter) 转换为浮点类型(浮点、双精度或十进制,具体取决于您需要的速度/精度):

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

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

你会得到你期望的结果。

【讨论】:

  • @RicGaudet - 是的,两者都可以。您只需要转换一侧来告诉编译器这是浮点运算。
【解决方案2】:

如 cmets 中所述,您需要cast 您的结果。这应该有效:

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

【讨论】:

  • 强制转换结果仍将导致整数运算。您需要进行除法之前进行投射。
猜你喜欢
  • 2017-01-10
  • 2018-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多