当我尝试解决简单方程时,我遇到了问题。我的等式是找到学生分数的百分比。 这是我的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace thered_Try
{
public partial class Form1 : Form
{
decimal res;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int oneee = 300;
int two = 1000;
int thee = 10;
res = (oneee / two) * 10;
label1.Text = res.ToString();
}
private void button2_Click(object sender, EventArgs e)
{
Form2 form = new Form2();
form.ShowDialog();
}
}
}
结果是0.我的错误在哪里?
答案 0 :(得分:2)
您正在执行两个整数之间的除法 - 这意味着结果也会计算为整数。 300/1000是0 ...然后你将它乘以10,它仍然是0。
选项:
使用浮点运算。您可以通过生成所有变量double
或通过转换:
ret =(int)((oneee /(double)two)* 10);
(其他浮点类型也可以使用,例如decimal
或float
......在某些情况下,它们的结果可能略有不同。)
乘以10 首先:
res = (oneee * 10) / two;
请注意,对于百分比,您需要乘以100,而不是10.乘以第一个可能比使用浮点更简单如果只需要整数结果,则 你知道乘法永远不会溢出。
另请注意,要快速尝试这样的事情,使用控制台应用程序比使用Windows窗体要简单得多。这是一个完整的示例,显示它正常工作:
using System;
class Test
{
static void Main()
{
int oneee = 300;
int two = 1000;
int res = (oneee * 10) / two;
Console.WriteLine(res); // 3
}
}
编辑:如果您打算使用p
format specifier,则应使用浮点数代替:
int marksScored = 300;
int marksAvailable = 1000;
double proportion = ((double) marksScored) / marksAvailable;
string text = proportion.ToString("p1"); // "30.0%"
请注意,除法运算符中只有一个操作数必须是double
- 尽管如果你发现它更清晰,你可以 。
答案 1 :(得分:0)
在所有基于C
的编程语言(如C#
)中,将根据表达式中使用的最高类型评估操作。因此,如果您将乘以两个integers
,编译器将使用integer
乘法,但如果您乘以float
和integer
,编译器将使用float
乘法。在你的情况下,你划分两个integer
,所以编译器将使用integer
除法。
要解决您的问题,您应该将其中一个数字转换为float
。你可以通过很多方式做到这一点。以下是一些:
res = ((float) oneee / two) * 10;
res = ((double) oneee / two) * 10;
答案 2 :(得分:0)
你正在使用整数,所以结果也是整数,0.3变为0.你应该在计算前使用double代替或者使用强制转换加倍。
答案 3 :(得分:0)
试试这个:
private void button1_Click(object sender, EventArgs e)
{
decimal oneee = 300;
decimal two = 1000;
decimal thee = 10;
decimal aResult = (oneee / two) * 10;
label1.Text = aResult.ToString("0.00");
}
答案 4 :(得分:0)
结果的类型取决于使用的变量。
2 int
之间的任何数学运算都会返回int
在进行数学运算之前,您需要将其中一个转换为小数:
res = (oneee / (decimal)two) * 10;
答案 5 :(得分:0)
you are using int and when you are dividing it by
(1000/300) it will result 0.3. But the data type is int, so result is 0;
Please use below code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace thered_Try
{
public partial class Form1 : Form
{
decimal res =0;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
decimal oneee = 300;
decimal two = 1000;
decimal thee = 10;
res = (oneee / two) * 10;
label1.Text = res.ToString();
}
private void button2_Click(object sender, EventArgs e)
{
Form2 form = new Form2();
form.ShowDialog();
}
}
}
Thanks, Let me know your result.