La parte decimal es fácil.
float numero
float decimales
decimales = numero - (int)numero;
Lo del número de digitos es más complejo. Tienes que echar una cuenta con logaritmos. Tienes que usar el logaritmo en base 10 (búscalo en el compilador que utilices y sería algo así como)
numeroDigitos = (int)(log (fabs(numero))+1);
Si numero es 10, el log() vale 1 y al sumarle 1 salen 2 cifras.
Si numero es100, el log() vale 2 y al sumarle 1 salen 3 cifras.
Si el numero está entre 10 y 100, el log() vale 1 y pico. Al sumarle 1 y sacar la parte entera saldrá 2.
etc, etc.
Para números negativos habría que quitar el signo, por eso lo del fabs().
Ojo con número del estilo 0.01, que sale log() igual a -2 y no funcionará bien. No vale esta cuenta para números menores que 1.
Otra opción más chapucera es meter el número en una cadena con sscanf(cadena, "%f", numero) y luego ver la longitud de cadena. Eso sí, tienes que descontar un caracter de signo (si lo hay), uno para el punto decimal, etc, etc.
Se bueno.