Un número entero es un número real, pero un número real no es un número entero.
Un número entero es un sub-conjunto dentro de los números reales.
De todos modos, olvídate por un momento del formato de printf. En C hay variostipos, y dentro de los tipos nativos podemos diferenciar 2 grupos: los enteros y los reales, que están en formato coma flotante. Los enteros no tienen decimales, los flotantes sí.
Si te da 0.000 cuando pones %f es un error lógico. Le estás diciendo que va a recibir un flotante, y le pasas un entero. Ten en cuenta que poner %f en vez de %d no cambia nada más que la forma en la que interpreta printf el parámetro que le pasas.
por tanto también debería de darme un número entero si ese es el resultado al poner eso.
Es muy diferente en programación un número entero de un número en coma flotante. "Coma flotante" es el nombre de un estándar. Mientras que los enteros se almacenan en memoria de un modo (generalmente, en complemento a dos), mientras que la coma flotante de otro más complejo, que no tiene nada que ver. Cuando printf coge el entero como si fuera un float, está leyendolo como si estuviera en formato de coma flotante, y los valores que te muestre van a ser casi "aleatorios".