A ver, ¿qué tal así?
Código (c) [Seleccionar]
#include <stdio.h>
#include <math.h>
unsigned p_fraccionaria(double d) {
unsigned retvalue;
d = fabs(d);
d -= (unsigned long)d;
d *= 1000000; // <-- 6 decimales ya es bastante precision
retvalue = d;
if(retvalue < d) // <-- por si en la conversion ha habido
++retvalue; // <-- perdida de precision
else if(retvalue > d) //
--retvalue; //
if(retvalue) // <-- Si no es 0, intentamos
while(!(retvalue % 10)) // <-- quitar 0 por la derecha
retvalue /= 10; //
return retvalue;
}
int main() {
double num;
num = 12.34;
printf("%f : %u\n", num, p_fraccionaria(num));
num = 12.34567890123;
printf("%f : %u\n", num, p_fraccionaria(num));
num = 12.00;
printf("%f : %u\n", num, p_fraccionaria(num));
num = 12;
printf("%f : %u\n", num, p_fraccionaria(num));
num = -12.34;
printf("%f : %u\n", num, p_fraccionaria(num));
return 0;
}