En principio, los puntos claves los haces bien
1) Redondear a cero
2) Observas que si es numero el tamaño siempre es mejor que 9 y asi distingues un tipo de otros
No veo a simple vista problema en tu codigo, pero los errores pueden venir
1) Por la conversion decimal/binario
2) Precision en la division y el redondeo (Aunque lo dudo).
3) No queda claro en el enunciado (y dudo que sea asi, solo es una idea loca) , pero dice "un numero decimal entre 2 y 999999999" ¿Incluira 2.1 por ejemplo?
4) (Menos probable) Error en los juegos de prueba internos.
Si tengo un rato intentare hacerlo yo de cero, a ver que tal me sale.
Si das con la solucion nos dices, un saludo