【问题标题】:Can't figure out why grade calculation isn't performed right无法弄清楚为什么成绩计算没有正确执行
【发布时间】:2014-03-31 22:26:20
【问题描述】:

我的问题是,当我尝试用低于 25/25 的作业计算成绩时,成绩会达到 75%。忽略我部分中的任何其他点。

因此,如果每个作业都有 100% 完成,我会得到:

Grade   A
Percentage  105%
Labs    250 / 250

但是当缺少 1 分的实验室时:

Grade   C
Percentage  75%
Labs    249 / 250

为什么会这样?我对此有点困惑。

这就是我从文本字段中收集输入的方式。每个文本字段都在调用这个:AutoPostBack="True" OnTextChanged="textbox_TextChanged"

    foreach (Control control in Page.Controls)
    {
        foreach (Control textbox in control.Controls)
        {
            if (textbox is TextBox)
            {
                TextBox tb = textbox as TextBox;

                char type = tb.ID.ToCharArray()[0];

                if (!string.IsNullOrWhiteSpace(tb.Text))
                {
                    if (type == 'l')
                    {
                        int outtt;
                        string inn = tb.Text;
                        Int32.TryParse(inn, out outtt);

                        labs += outtt;
                        labPoints += 25;
                    }
                    else if (type == 'q')
                    {
                        ...
                    }
                    ...
                }
            }
        }
    }

这是我计算百分比的方式:

        percent = (((labs / labPoints) * 0.3) + // labs
                ((quizzes / quizPoints) * 0.1) + // quizzes
                ((exams / examPoints) * 0.3) + // exams
                ((project / projectPoints) * 0.2) + // project
                ((extra / extraPoints) * 0.05) + // extra credit
                ((part / partPoints) * 0.10)) * 100;// participation

【问题讨论】:

  • 因为是整数除法不是浮点除法。
  • 您确定您的每个变量都得到了正确的值吗?百分比的数据类型是什么?试着让它double
  • 请发布labs 的类型和值以及所有其他涉及的变量。旁注:考虑将 UI/收集数据与计算分开。 IE。将所有数据收集到{Points, Subject} 列表中,然后仅使用计算部分在此处更新您的示例代码 - 这样您就可以轻松显示/测试哪些数据导致错误值。
  • @Nath - 我评论中的两个等式(除了自动类型转换)本质上是等价的。这是否是一个正确的成绩公式是一个独立的问题。

标签: c# asp.net web-controls


【解决方案1】:

您正在使用整数除法,这将始终导致整数。为了快速而肮脏的修复,您应该在除法时将变量转换为一些浮点变量。

例如:

(double)labs / (double)labPoints

(如果任何参数是双精度,则结果将是双精度。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多