Te sugiero algo que yo haría "a priori" (aunque fuera ineficiente y todo lo que se quiera).
1. Obtengo mi número con infinitos decimales
2. Yo quiero truncarlo en, supongamos, 3 decimales.
3. Convierto el número con infinitos decimales a una string (C++) o de tipo char (C). Por ejemplo haciendo:
float data;
char bur[100];
sprint(buf,"%f", data);
4. Corto la ristra resultante hasta el número de decimales que me hayan dicho. Como en mi ejemplo quiero tres, pues busco el caracter "." (punto) y de ahí en adelante avanzo tres y corto. Por tanto, si tenía 3.11123456 me quedaría 3.111 ("23456" no entraría).
5. Reconviertes a float el resultado (atof)
Salu2!
PD: función atof [
http://www.conclase.net/c/librerias/....php?fun=atof]