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。我错在哪里?

c#百分比为0

您在两个整数之间执行除法-这意味着结果也是作为整数计算的。300/1000等于0…然后再乘以10,结果还是0

选项:

  • 使用浮点运算。您可以将所有变量设置为double,或者强制转换为:

    ret = (int) ((oneee/(double) two) * 10);

    (其他浮点类型也可以工作,如decimalfloat…在某些情况下,它们可能会给出非常细微的不同结果。

  • 首先乘以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乘法,但如果你将floatinteger相乘,编译器将使用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.