Alright, I\'m trying to calculate the percentage of two values. This should be really simple but for some weird reason it\'s not working. I\'m too tired/dumb to figure it ou
Indeed, simple error, when doing diversions with int, the answer will be an int. Your answer would be between 0 and 1 so rounded down it is 0 (int).
Use:
int returnvalue = (int)((FilesCompleted / (double)TotalFilesCount) * 100);
To make your calculation use a double for the fractional number and then multiply that by 100 and cast that to an int.
i checked the values while debugging and with FilesCompleted being 295 and TotalFilesCount being 25002 the returnvalue var is just 0, it should be 1 already.
No, because all the arithmetic is being done with integers. So first this expression is evaluated:
(FilesCompleted / TotalFilesCount)
That's 295 / 25002. The result of that integer arithmetic is 0... and when you then multiply it by 100, you've still got 0. The simplest fix is just to do the multiplication first:
int returnvalue = (FilesCompleted * 100) / TotalFilesCount;
Note that that will overflow if FilesCompleted
is greater than int.MaxValue / 100
. You could fix that by either doing everything in floating point arithmetic:
int returnvalue = (int)((FilesCompleted * 100.0) / TotalFilesCount);
... or by using long
integer arithmetic:
int returnvalue = (int)((FilesCompleted * 100L) / TotalFilesCount);
Neither of these are necessary if you don't expect to have an insane number of files, of course. (You're fine up to 42 million files...)
As a side note, your parameter names violate .NET naming conventions. They should be camelCased - totalFilesCount
and filesCompleted
.
How about
int returnvalue = (int)(((double)FilesCompleted / TotalFilesCount) * 100);
What this is doing
Converting int
FilesCompleted to double
. For eg if its 295, then this will convert it into 295.0 so that division happens in double.
There is no need to convert TotalFilesCount
to double also as divison of double by integer (or integer by double) returns a double.
So the returned double result is 0.011799056075513958 which is multipled by 100
So the retunred result is 1.1799056075513958 which is finally converted to int which returns 1
The FilesCompleted/TotalFilesCount
returns 0.01 which in int format is 0, try FilesCompleted*100/TotalFilesCount
!