Вы преобразуете double
в int
, поэтому, конечно, вашим результатом будет целое число, которое сокращает конечные десятичные дроби.Таким образом, если у вас double
равно 8,9, будет усечено до 8, а 8,1 будет усечено до 8. Таким образом, если ваши 10% близки к 9, ваши 10% будут крайне неточными, потому что они обрезались до 8.
Для «точных» 10% байты не могут быть разделены, поэтому наилучшее значение, которое вы можете получить, - это приближение.
Файл длиной 11 111 байтов будет иметь 111,11 байта как 10%, но компьютеры читают целые байты, как если бы у вас было 11,111 человек, вы не можете взять точные 10%, потому что разделение человека на 0,11% от человека + 111 человек не вариант.
Таким образом, вы получаете наилучшее приближение через округление.
int fileSize10p = Math.Round((double)fileSize / 10.0); //10% of file size
if(fileSize10p == totalReadCount){
//do something
}