C#百分比为0

时间:2012-12-25 08:24:57

标签: c#

当我尝试解决简单方程时,我遇到了问题。我的等式是找到学生分数的百分比。 这是我的代码:

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.我的错误在哪里?

6 个答案:

答案 0 :(得分:2)

您正在执行两个整数之间的除法 - 这意味着结果也会计算为整数。 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 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乘法,但如果您乘以floatinteger,编译器将使用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.