C#数学百分比问题

C#数学百分比问题,c#,math,C#,Math,我在计算百分比方面有问题。 我想不出是什么问题。 问题是showData方法中使用的'perc'变量,但我已经包含了整个源代码。它只是一直输出零。提前谢谢 这是我的密码‌: using System; using System.Linq; namespace Task6_5 { class Traffic { int[] trafficCount; int max = 0; int total = 0, index; double perc; publ

我在计算百分比方面有问题。 我想不出是什么问题。 问题是showData方法中使用的'perc'变量,但我已经包含了整个源代码。它只是一直输出零。提前谢谢

这是我的密码‌:

using System;
using System.Linq;

namespace Task6_5
{
class Traffic
{
    int[] trafficCount;
    int max = 0;
    int total = 0, index;
    double perc;

    public static void Main (string[] args)
    {
        Traffic myTraffic = new Traffic ();
        myTraffic.report ();
    }
    public Traffic() {
        trafficCount = new int[5];
    }
    public void enterCounts() {
        for (int i = 0; i < 5; i++) {
            Console.WriteLine ("Please enter Car Count No. " + (i + 1) + " : ");
            trafficCount [i] = Convert.ToInt32(Console.ReadLine ());
        }
    }
    public void showTotal() {
        for (int i = 0; i < trafficCount.Length; i++) {
            total += trafficCount [i];
        }
    }
    public void busiest() {
        max = trafficCount.Max ();
        index = Array.IndexOf (trafficCount, max) + 1;
        Console.WriteLine ("Busiest Hour : " + index);
    }
    public void showData() {
        Console.WriteLine ("Traffic Report");
        Console.WriteLine ("====================");
        Console.WriteLine ("Hour        Car Count       Percentage Total");
        Console.WriteLine ("================================================");
        for (int i = 0; i < trafficCount.Length; i++) {
            perc = trafficCount[i] / total * 100;
            Console.WriteLine ((i + 1) + "              " + trafficCount [i] + "         " + perc + "%");
    }
        Console.WriteLine ("Total Number of cars seen today : " + total);
}
    public void report() {
        enterCounts ();
        showTotal ();
        showData ();
        busiest ();
    }
}
}
使用系统;
使用System.Linq;
命名空间任务6_5
{
班级交通
{
int[]流量计数;
int max=0;
int-total=0,索引;
双perc;
公共静态void Main(字符串[]args)
{
交通量myTraffic=新交通量();
myTraffic.report();
}
公共交通{
流量计数=新整数[5];
}
公营机构{
对于(int i=0;i<5;i++){
Console.WriteLine(“请输入车辆计数编号”+(i+1)+“:”;
trafficCount[i]=Convert.ToInt32(Console.ReadLine());
}
}
公众假期总数(){
对于(int i=0;i
您应该将其更改为double,因为int/int在c#中返回一个int

或者你可以

((double)trafficCount[i]) / ((double)total * 100.0f);

您应该将其更改为double,因为int/int在c#中返回一个int

或者你可以

((double)trafficCount[i]) / ((double)total * 100.0f);
你的声明:

perc = trafficCount[i] / total * 100;
正在使用整数数据类型。虽然您已将
perc
定义为double,但赋值的右侧都是整数,因此计算是以整数类型进行的。必须至少有一个操作数的类型为double/float,才能获得浮点数。比如:

perc = ((double)trafficCount[i] / total) * (double)100;
在您当前的代码中,所有的计算都是以整数类型进行的,因此会产生一个整数值,因此对于类似
0.12
的值,您将得到
0
。通过将操作数强制转换为双倍,可以造成浮点运算。您可以强制转换为双精度或使用
100d
您的语句:

perc = trafficCount[i] / total * 100;
正在使用整数数据类型。虽然您已将
perc
定义为double,但赋值的右侧都是整数,因此计算是以整数类型进行的。必须至少有一个操作数的类型为double/float,才能获得浮点数。比如:

perc = ((double)trafficCount[i] / total) * (double)100;

在您当前的代码中,所有的计算都是以整数类型进行的,因此会产生一个整数值,因此对于类似
0.12
的值,您将得到
0
。通过将操作数强制转换为双倍,可以造成浮点运算。您可以强制转换为double或使用
100d
整数除法生成c#中的整数。您可以对表达式重新排序,以更正它,但:

perc = trafficCount[i] * 100 / total;

整数除法产生c#中的整数。您可以对表达式重新排序,以更正它,但:

perc = trafficCount[i] * 100 / total;

看起来您正在将一个int除以一个int-这将始终导致一个int。将一个操作数强制转换为double,或者将包含的数据类型设置为double(对于我可能添加的一个操作数),并且不使用
perc
。它只是计算出来的,没有打印出来。@Brad:
perc
用于下一行。@recursive噢,如果你向右滚动:)我没有看到太多的空白。看起来你是在用一个int除以一个int-这总是会导致一个int。要么将操作数转换为double,要么将包含的数据类型转换为double(对于我可能添加的一个操作数)加上您没有使用
perc
。它只是计算出来的,没有打印出来。@Brad:
perc
用于下一行。@recursive噢,如果您向右滚动:)我没有看到太多的空白。