en realidad lo que hace tu programa esta un poco mal.
ya que distingue un tipo flotante (que puede ser float o double) de un entero que puede ser (int, long, etc...)
recuerda que cada tipo de dato tiene un rango especifico.
entonces, lo qe tienes que hacer , es saber si entra dentreo de ese rango, si no, es otro tipo.
el valor float alamcena datos una precision aprox de 7 digitos (32 bits)
y el valor long comprende valores entre
-9223372036854775808 y +9223372036854775807
entonces solo checa que entre dentro de ese rango y que no tenga ningun punto (.), si es asi, es long, si no es float.