【问题标题】:How to divide two TextBoxes with a double and a int?如何用 double 和 int 划分两个 TextBox?
【发布时间】:2020-02-01 07:37:08
【问题描述】:
private void button1_Click(object sender, EventArgs e)
{
    int res = 0;
    try
    {
        res = Convert.ToInt32(costot.Text) / Convert.ToInt32(unidadesp.Text);
        costou.Text = res.ToString();
    }
    catch (Exception ex) { }
}

【问题讨论】:

  • 你的意思是你不知道如何在VB.Net中进行非整数除法?无论如何,这在 C# 中也不起作用:结果应该是十进制值。如果我解释正确,您正试图将 Total Value 除以 Number of Units,后者返回十进制类型。但是,你不应该做这种操作。如果您有单位价值/价格,则应将其乘以单位数量,而不是得出单位价值。您很可能会有一种舍入形式,因此,在某些时候,值将不再匹配......
  • 此外,您应该在此处使用decimal.TryParse()int.TryParse()(在 VB.Net 中相同),因为 来自文本框。您永远无法确定您从用户输入中得到了什么。可能,使用 NumericUpDown 控件来帮助验证此输入。然后,您必须在格式化结果时考虑 CurrentCulture。不同的文化有不同的千位/小数分隔符和小数位数,例如,当您必须表示货币时(也可能需要货币符号)。
  • 另外,检查分母中的 0。
  • 感谢您的回复...我知道这不是一个好问题。无论如何,被除数来自十进制数据类型 (7000,50) 的数据库,除数是客户端直接输入的 (500)。我们必须将这些值除以 7000,50/500 = 14,001,并在点击事件发生时将其显示在文本框中。
  • 我们正在使用这个代码: private void button1_Click(object sender, EventArgs e) { int res = 0; res = Convert.ToDouble(costot.Text) / Convert.ToDouble(unidadesp.Text); costou.Text = res.ToString();我们已经尝试了 decimal.TryParse() 和 int.TryParse(),我们正在寻找正确的语法。

标签: c# winforms textbox type-conversion


【解决方案1】:

不确定这是否是您所追求的,但它应该为您提供语法。

    private void button1_Click(object sender, EventArgs e)
    {
        int res = 0;
        if (double.TryParse(costot.Text, out double costot) && double.TryParse(unidadesp.Text, out double unidadesp) && unidadesp != 0)
        {
            res = (int)(Math.Round(costot / unidadesp));
            costou.Text = res.ToString();
        }
    }

如果您需要在除法之前将 costot 和 unidadesp 都更改为整数,请执行此操作。

res = (int)(Math.Round(Math.Round(costot) / Math.Round(unidadesp)));

再修改一次

    private void button1_Click(object sender, EventArgs e)
    {

        if (double.TryParse(textBox1.Text, out double costot) && int.TryParse(textBox2.Text, out int unidadesp) && unidadesp != 0)
        {
           var res = costot / unidadesp;
            textBox3.Text = res.ToString();
        }
    }

【讨论】:

  • 您不能在此处使用int。如 OP 所述,结果应如示例中所示:7000,50/500 = 14,001。由于7000,50 输入(不是decimal 也不是double,它只是一个格式化字符串),您需要两个decimal 类型并返回一个decimal
  • @Jimi 只要将文化设置为逗号为小数分隔符的位置就不会加倍。TryParse("7000,50", out double dbl) 工作?
  • 检查四舍五入。这不是唯一的问题。这是另一个:res = (int)(costot / unidadesp);。您需要在此处返回/生成小数,而不是 int。请参阅示例。
  • @Jimi 我以为他们想要一个 int,因为 res 被声明为 int。现在我看到他们想在除法之前转换数字。顺便说一句,我添加了 Math.Round。
  • @Jimi 我希望我对答案的编辑更接近 OP 的需要。
猜你喜欢
  • 2016-01-21
  • 2015-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-23
相关资源
最近更新 更多