简单的计算由于某种原因不起作用

0 .net c# percentage

好吧,我正在尝试计算两个值的百分比.这应该是非常简单的,但由于一些奇怪的原因,它不起作用.我太累了/笨到想不出来.这是我的代码,它一直返回0,我在调试时检查了值,并且FilesCompleted为295,TotalFilesCount为25002,returnvalue var只为0,它应该是1.

private int CalculatePercentComplete(int FilesCompleted, int TotalFilesCount)
        {
            int returnvalue = (FilesCompleted / TotalFilesCount) * 100;

            if (returnvalue > 100 || returnvalue < 1) return 1;
            else return returnvalue;
        }
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 11

我在调试时检查了值,并且FilesCompleted为295,TotalFilesCount为25002,returnvalue var只为0,它应该是1.

不,因为所有算术都是用整数完成的.首先评估这个表达式:

(FilesCompleted / TotalFilesCount)
Run Code Online (Sandbox Code Playgroud)

那是295/25002. 整数算术的结果是0 ...然后当你将它乘以100时,你仍然得到0.最简单的解决办法就是先进行乘法运算:

int returnvalue = (FilesCompleted * 100) / TotalFilesCount;
Run Code Online (Sandbox Code Playgroud)

请注意,如果FilesCompleted大于,则会溢出int.MaxValue / 100.您可以通过在浮点运算中执行所有操作来解决此问题:

int returnvalue = (int)((FilesCompleted * 100.0) / TotalFilesCount);
Run Code Online (Sandbox Code Playgroud)

...或使用long整数运算:

int returnvalue = (int)((FilesCompleted * 100L) / TotalFilesCount);
Run Code Online (Sandbox Code Playgroud)

当然,如果你不希望拥有疯狂数量的文件,这些都不是必需的.(你可以获得4200万个文件...)

另请注意,您的参数名称违反了.NET命名约定.他们应该是camelCased - totalFilesCountfilesCompleted.