c#百分比为0
本文关键字:百分比 | 更新日期: 2023-09-27 17:49:24
我有一个问题,当我试图解决简单的方程。我的方程式是找出学生分数的百分比。这是我的代码:
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。我错在哪里?
您在两个整数之间执行除法-这意味着结果也是作为整数计算的。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
格式说明符,则应该使用浮点数:
int marksScored = 300;
int marksAvailable = 1000;
double proportion = ((double) marksScored) / marksAvailable;
string text = proportion.ToString("p1"); // "30.0%"
请注意,除法操作符的一个操作数必须是double
-尽管您可以将和同时强制转换,如果您觉得这样更清楚的话。
try this:
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");
}
你正在处理整数,所以结果也是整数,0.3变成0。在计算前应该使用double或强制转换为double
结果的类型取决于所使用的变量。
两个int
之间的任何数学运算都将返回一个int
。
在进行数学运算之前,需要将其中一个转换为小数:
res = (oneee / (decimal)two) * 10;
在所有基于C
的编程语言(如C#
)中,操作将根据表达式中使用的最高类型进行计算。因此,如果你将两个integers
相乘,编译器将使用integer
乘法,但如果你将float
和integer
相乘,编译器将使用float
乘法。在你的例子中,你划分了两个integer
,所以编译器将使用integer
划分。
要解决您的问题,您应该将其中一个数字转换为float
。你可以用很多方法做到这一点。以下是一些:
res = ((float) oneee / two) * 10;
res = ((double) oneee / two) * 10;
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.