Hledal jsem kód pro konverzi čísla na text, např. "jedentisícšestsetdevět" a nenašel, možná špatně hledal. Rozšířil jsem nějakou anglickou verzi a tady je výsledek, kdyby se to někomu hodilo... :)

package cz.steger.utils;

/**
 * Konverze čísla na text, např. 1609 na "jedentisícšestsetdevět".
 *
 * @author Ondřej Steger, 29.07.2007
 *
 */
public class Number2Text {

        private static int language = 1;
        private static String rod = "M";
        private static final String ROD_MASCULINUM = "M";
        private static final String ROD_FEMININUM = "F";
        private static final String ROD_NEUTRUM = "N";

        private static Number2Text instance = null;

        private Number2Text() {
        }

        public static Number2Text getInstance() {
                if (instance == null)
                        instance = new Number2Text();
                return instance;
        }

        public Number2Text(int language, String rod) {
                this.language = language;
                this.rod = rod;
        }

        private static final String[][] majorNames = { { "", "", "" },
                        { "tisíc", "tisíce", "tisíc" }, { "milión", "milióny", 
"miliónů" },
                        { "miliarda", "miliardy", "miliard" },
                        { "trilión", "trilióny", "triliónů" },
                        { "kvadrilión", "kvadrilióny", "kvadriliónů" },
                        { "kvintilión", "kvintilióny", "kvintiliónů" } };

        private static final String[] tensNames = { "", "deset", "dvacet",
                        "třicet", "čtyřicet", "padesát", "šedesát", "sedmdesát",
                        "osmdesát", "devadesát" };

        private static final String[][] numNames = { { "", "", "" },
                        { "jeden", "jedna", "jedno" }, { "dva", "dvě", "dvě" },
                        { "tři", "tři", "tři" }, { "čtyři", "čtyři", "čtyři" },
                        { "pět", "pět", "pět" }, { "šest", "šest", "šest" },
                        { "sedm", "sedm", "sedm" }, { "osm", "osm", "osm" },
                        { "devět", "devět", "devět" }, { "deset", "deset", 
"deset" },
                        { "jedenáct", "jedenáct", "jedenáct" },
                        { "dvanáct", "dvanáct", "dvanáct" },
                        { "třináct", "třináct", "třináct" },
                        { "čtrnáct", "čtrnáct", "čtrnáct" },
                        { "patnáct", "patnáct", "patnáct" },
                        { "šestnáct", "šestnáct", "šestnáct" },
                        { "sedmnáct", "sedmnáct", "sedmnáct" },
                        { "osmnáct", "osmnáct", "osmnáct" },
                        { "devatenáct", "devatenáct", "devatenáct" } };

        private String convertLessThanOneThousand(int number, int place) {
                String soFar;

                if (number % 100 < 20) {
                        if (place == 0)
                                if (rod.equals(ROD_MASCULINUM))
                                        soFar = numNames[number % 100][0];
                                else if (rod.equals(ROD_FEMININUM))
                                        soFar = numNames[number % 100][1];
                                else
                                        soFar = numNames[number % 100][2];
                        else if (place < 2)
                                soFar = numNames[number % 100][0];
                        else if (place == 3)
                                soFar = numNames[number % 100][1];
                        else
                                soFar = numNames[number % 100][0];
                        number /= 100;
                } else {
                        soFar = numNames[number % 10][0];
                        number /= 10;

                        soFar = tensNames[number % 10] + soFar;
                        number /= 10;
                }
                if (number == 0)
                        return soFar;
                if (number == 1)
                        return numNames[number][2] + "sto" + soFar;
                else if (number == 2)
                        return numNames[number][1] + "stě" + soFar;
                else if (number == 3 || number == 4)
                        return numNames[number][0] + "sta" + soFar;
                else
                        return numNames[number][0] + "set" + soFar;
        }

        public String convert(int number) {
                return this.convert(number, ROD_MASCULINUM, 1);
        }

        /**
         *
         * @param number
         * @param rod M = masculinum, F = femininum, N = neutrum
         * @param language
         * @return
         */
        public String convert(int number, String rod, int language) {
                this.language = language;

                /* special case */
                if (number == 0) {
                        return "nula";
                }

                String prefix = "";

                if (number < 0) {
                        number = -number;
                        prefix = "-";
                }

                String soFar = "";
                int place = 0;

                do {
                        int n = number % 1000;
                        if (n != 0) {
                                String s = convertLessThanOneThousand(n, place);
                                String majS = String.valueOf(n);
                                int maj = 
Integer.valueOf(majS.substring(majS.length() - 1))
                                                .intValue();
                                if (maj == 1)
                                        soFar = s + majorNames[place][0] + 
soFar;
                                else if (maj > 1 && maj < 5)
                                        soFar = s + majorNames[place][1] + 
soFar;
                                else
                                        soFar = s + majorNames[place][2] + 
soFar;
                        }
                        place++;
                        number /= 1000;
                } while (number > 0);

                return (prefix + soFar).trim();
        }

        public static void main(String[] args) {
                Number2Text f = new Number2Text(1, "F");
                System.out.println("*** " + f.convert(0));
                System.out.println("*** " + f.convert(1));
                System.out.println("*** " + f.convert(16));
                System.out.println("*** " + f.convert(100));
                System.out.println("*** " + f.convert(118));
                System.out.println("*** " + f.convert(200));
                System.out.println("*** " + f.convert(219));
                System.out.println("*** " + f.convert(800));
                System.out.println("*** " + f.convert(801));
                System.out.println("*** " + f.convert(1609));
                System.out.println("*** " + f.convert(2230316));
                System.out.println("*** " + f.convert(3316));
                System.out.println("*** " + f.convert(1000000));
                System.out.println("*** " + f.convert(2000000));
                System.out.println("*** " + f.convert(3000200));
                System.out.println("*** " + f.convert(700000));
                System.out.println("*** " + f.convert(9999992));
                System.out.println("*** " + f.convert(123456789));
                System.out.println("*** " + f.convert(-45));
        }

}


Odpovedet emailem