Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数学运算总是返回0 c#_C# - Fatal编程技术网

数学运算总是返回0 c#

数学运算总是返回0 c#,c#,C#,我有一个计算百分比并返回int值的c#程序,但它总是返回0 我已经写了16个小时的代码,如果您发现其中的错误,我将不胜感激 我调试了代码,发现值传递正确 private int returnFlag(int carCapacity, int subscribers) { int percentage = (subscribers / carCapacity)*100; return percentage; } 整数类型(int)不适用于分数。将您在除法中使用的类型更改为十进制、

我有一个计算百分比并返回int值的c#程序,但它总是返回0

我已经写了16个小时的代码,如果您发现其中的错误,我将不胜感激

我调试了代码,发现值传递正确

private int returnFlag(int carCapacity, int subscribers)
{
    int percentage = (subscribers / carCapacity)*100;
    return percentage;
}

整数类型(int)不适用于分数。将您在除法中使用的类型更改为十进制、双精度、单精度或浮点型。

您看到的是对两个整数进行运算并丢失小数部分的结果

这段代码在使用值5和14时将截断为0:

(subscribers / carCapacity)
您需要将其中一个操作数强制转换为双精度或十进制:

private int returnFlag(int carCapacity, int subscribers)
{
    decimal percentage = ((decimal)subscribers / carCapacity) * 100;

    return (int)percentage;
}

问题是,由于您正在对
int
(读取:整数)值执行数学运算,因此任何分数或余数都会被抛出。这可以通过将代码更改为

int percentage = (subscribers / carCapacity);
percentage *= 100;
由于
(订户/carCapacity)
的结果少于一个,因此
int
可以容纳的唯一可能的数字是
0
0*100
0

在执行操作之前,您可以通过转换为更精确的数字来解决此问题,例如
double

private int returnFlag(int carCapacity, int subscribers)
{
    double percentage = ((double)subscribers / (double)carCapacity) * 100.0;
    return (int)percentage;
}

我通过了5分和14分,所以至少它应该返回一些有意义的东西