我今天第一次开始使用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!";
}
请帮我纠正我做错了什么,
谢谢:)
答案 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
该除法将结果舍入为零,且绝对值为 结果是最大可能的整数小于 两个操作数的商的绝对值。
如果要将其显示为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!";
}
试试吧