Código C:
Ver originalint H,M,CANT_A;
float PORC_H,PORC_M;
PORC_H=(H/CANT_A)*100;
H y CANT_A son enteros, luego la división de ambos da como resultado un entero, lo que hace que pierdas los decimales.
Esta otra combinación, en cambio, divide un entero entre un float. En este caso el estándar dicta que el resultado se devuelva en forma de float, es decir, con decimales.
Después ese float se multiplica por un entero, en este caso el estándar dice que el resultado será otra vez un float, manteniendo los decimales.
Otra posibilidad sin hacer conversiones explícitas:
En este caso int*float=float y float/int=float, luego tampoco perderás los decimales.
Un saludo.