【发布时间】: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