public static String numeroACastellano(long n) {
        String resultado = "";
        int grupo = 0;
        while (n != 0 && grupo < _grupos.length) {
            long fragmento = n % 1000000;
            int millarAlto = (int) (fragmento / 1000);
            int millarBajo = (int) (fragmento % 1000);
            n = n / 1000000;

            String nombreGrupo = _grupos[grupo];
            if (fragmento > 1 && grupo > 0) {
                nombreGrupo += "es";
            }


            if ((millarAlto != 0) || (millarBajo != 0)) {
                if (millarAlto > 1) {
                    resultado = millarATexto(millarAlto) + " mil "
                            + millarATexto(millarBajo) + " "
                            + nombreGrupo + " "
                            + resultado;
                }


                if (millarAlto == 0) {
                    resultado = millarATexto(millarBajo) + " "
                            + nombreGrupo + " "
                            + resultado;
                }

                if (millarAlto == 1) {
                    resultado = "mil " + millarATexto(millarBajo) + " "
                            + nombreGrupo + " "
                            + resultado;
                }
            }
            grupo++;
        }
        return resultado;
    }