简单的算术建议

时间:2014-03-03 12:18:52

标签: c#

我今天第一次开始使用c#。我最近一直在使用Delphi很多。

无论如何,我试图制作一个程序,检查你的商标是否等于或大于75%,如果是这样,标签将标题为You shall receive a bursary!,依此类推。有三个三个文本框不同的标记,即IT,数学和科学。他们都是150岁。

这是算术:

Average = (((Maths/150)*100)+((IT/150)*100)+((Science/150)*100))/3;

问题是,如果所有给定的标记都是140/150 = 93%,标签根本不会显示任何内容,如果它低于75%则不显示任何内容。

我的其余代码:

private void button1_Click(object sender, EventArgs e)
        {
            string Name;
            string Surname;
            int Maths;
            int Science;
            int IT;
            float Average;


            Name = edtName.Text;
            Surname = edtSurname.Text;
            Maths = int.Parse(edtMaths.Text);
            Science = int.Parse(edtScience.Text);
            IT = int.Parse(edtIT.Text);
            Average = (((Maths/150)*100)+((IT/150)*100)+((Science/150)*100))/3;

            if (Average >= 75)
            {
                lblOutput.Text += "You shall recieve a bursary!";
            } 

请帮我纠正我做错了什么,

谢谢:)

3 个答案:

答案 0 :(得分:6)

当你有整数算术时,140/150的除法会给你0

来自C#7.7.2 Division operator整数除法:

  

该除法将结果舍入为零,且绝对值为   结果是最大可能的整数小于   两个操作数的商的绝对值。结果为零   当两个操作数具有相同的符号且为0或0时为正   当两个操作数具有相反的符号时为负。

如果你想拥有90%(即0.9),那么你应该使用浮点除法:

Average = (((Maths/150F)*100)+((IT/150F)*100)+((Science/150F)*100))/3;

另外,我建议创建命名常量,解释150个幻数。

答案 1 :(得分:3)

因为你所做的就是integer division。它总是丢弃小数部分。

这就是为什么140/150始终为您提供0,而不是0.9333...

.NET有3种类型的划分。来自7.7.2 Division operator

中的C#规范
  • 整数分部
  • 浮点划分
  • 十进制分割
  

该除法将结果舍入为零,且绝对值为   结果是最大可能的整数小于   两个操作数的商的绝对值。

如果要将其显示为0.93,则需要将 中的一个整数转换为浮点数。

例如;

140d / 150 // 0.933333...
140 / 150d // 0.933333...
140d / 150d // 0.933333...
140.0 / 150 // 0.933333...
140 / 150.0 // 0.933333...
140.0 / 150.0 // 0.933333...

答案 2 :(得分:2)

private void button1_Click(object sender, EventArgs e)
        {
            string Name;
            string Surname;
            int Maths;
            int Science;
            int IT;
            float Average;


            Name = edtName.Text;
            Surname = edtSurname.Text;
            Maths = int.Parse(edtMaths.Text);
            Science = int.Parse(edtScience.Text);
            IT = int.Parse(edtIT.Text);
            Average = ((((float)Maths/150.0)*100)+(((float)IT/150.0)*100)+(((float)Science/150.0)*100))/3;

            if (Average >= 75)
            {
                lblOutput.Text += "You shall recieve a bursary!";
            } 

试试吧