Questo programma dovrebbe stampare un numero(anche decimale, a seconda dei casi), ma anche quando esegue una divisione ed ottiene un risultato decimale lo stampa intero(approssima), perchè?

codice:
#include <stdio.h>
#include <string.h>
#include <ctype.h>

#define dmax 100

float me(char frase[]);

int main(){
    char frase[dmax];
    printf("Insert a string:\n");
    gets(frase);
    printf("La media dei caratteri e': %f",me(frase));
    getch();
}

float me(char frase[]){
    int i=0;
    int contp=0,contlp=0;
    while(frase[i]!='\0'){
        if((isalpha(frase[i]))||(isdigit(frase[i]))){
            contp++;
            contlp++;
            i++;
            while((isalpha(frase[i]))||(isdigit(frase[i]))){
                contlp++;i++;
            }
        }
        else i++;
    }
    return contlp/contp;
}