Bueno, para mi aplicación he echo un apaño, consiste en escalar los datos, y guardarlos en un unsigned long, en lugar de guardar 476.005, guardo: 476005000, la funcion queda así:
char *
long_to_string(unsigned long f, int * status)
{
static char buf[17];
char * cp = buf;
unsigned long l, rem;
l = (f / 1000000);
rem = (f % 1000000);
sprintf(cp, "%lu.%6.6lu", l, rem);
return buf;
}
Saludos.