Целочисленное деление возвращает 0 в C

Целочисленное деление, вызванное элементами массива, возвращает 0, я должен хранить% в том же массиве....

array[6][i]=array[5][i]/total;

Это хранит 0... Я думал, что это как-то связано с тем, что массив является целочисленным массивом... поэтому я сделал приведение...

array[6][i]=(int)(array[5][i]/total); 

Все еще хранится 0 ... Я читал, что мне пришлось преобразовать их в числа с плавающей запятой, но приведение не работает ... Я пробовал это

array[6][i]=(int)((float)array[5][i]/(float)total); 

объявление массива

int arreglo[7][5]={{1,194,48,206,45},{2,180,20,320,16},{3,221,90,140,20},{4,432,50,821,14},{5,820,61,946,18},{0,0,0,0,0},{0,0,0,0,0}};

и последний будет хранить каждый процент


person OHHH    schedule 07.11.2012    source источник
comment
Можем ли мы увидеть две вещи: 1. объявление массива и 2. возможно, некоторые данные, которые вы в него поместили?   -  person Clinton Pierce    schedule 08.11.2012
comment
Если total больше по абсолютной величине, чем array[5][i], частное должно равняться 0.   -  person Daniel Fischer    schedule 08.11.2012
comment
Может вы забыли умножить на 100%?   -  person Kylo    schedule 08.11.2012
comment
Когда вы пишете, я должен хранить% в том же массиве. Вы имеете в виду процент или остаток (по модулю)?   -  person Daniel Fischer    schedule 08.11.2012
comment
Отвечает ли это на ваш вопрос? Каково поведение целочисленного деления?   -  person Anthony Sottile    schedule 02.11.2020


Ответы (2)


Если вам нужен процент, то вы ищете что-то вроде

array[6][i] = (int) (100 * ((float)array[5][i] / (float)total));
person prprcupofcoffee    schedule 07.11.2012

Это всегда будет возвращать 0.

Если вы работаете с целыми числами и делите на сумму, результат будет ‹1 и усечен до 0 (поскольку результат должен быть целым числом).

Вы должны либо использовать двойные (или поплавковые) массивы, либо масштабировать целые числа, например, в 100 раз (не в сумме)

person thedayofcondor    schedule 07.11.2012
comment
Это также может вернуть 1. Кроме того, обязательно упомяните, что это усекает вместо округления. - person ; 08.11.2012
comment
Да, может вернуть 1 в предельном случае, когда весь массив пуст, за исключением одного ненулевого элемента. - person thedayofcondor; 08.11.2012
comment
Также, когда некоторые элементы отменяют друг друга, т.е. {-2,7,1,1} всего =7 - person thedayofcondor; 08.11.2012