Re: Английские числительные (сумма прописью на английском)
От: vladserge Россия  
Дата: 05.07.03 06:41
Оценка:
Здравствуйте, Luchnik, Вы писали:

L>Господа, помогите, пожалуйста, кто чем может !

L>Нужно написать код по преобразованию чисел в английские числительные (сумма прописью на английском).
L>А с английским у меня не очень.
class EnglishDecimalFormat 
{ 
    private static final String[] majorNames = { 
        "", 
        " thousand", 
        " million", 
        " billion", 
        " trillion", 
        " quadrillion", 
        " quintillion" 
    }; 
 
    private static final String[] tensNames = { 
        "", 
        " ten", 
        " twenty", 
        " thirty", 
        " fourty", 
        " fifty", 
        " sixty", 
        " seventy", 
        " eighty", 
        " ninety" 
    }; 
 
    private static final String[] numNames = { 
        "", 
        " one", 
        " two", 
        " three", 
        " four", 
        " five", 
        " six", 
        " seven", 
        " eight", 
        " nine", 
        " ten", 
        " eleven", 
        " twelve", 
        " thirteen", 
        " fourteen", 
        " fifteen", 
        " sixteen", 
        " seventeen", 
        " eighteen", 
        " nineteen" 
    }; 
 
    private String convertLessThanOneThousand(int number) 
    { 
        String soFar; 
 
        if(number % 100 < 20) 
        { 
            soFar = numNames[number % 100]; 
            number /= 100; 
        } 
        else 
        { 
            soFar = numNames[number % 10]; 
            number /= 10; 
 
            soFar = tensNames[number % 10] + soFar; 
            number /= 10; 
        } 
        if(number == 0) return soFar; 
        return numNames[number] + " hundred" + soFar; 
    }
 
    public String convert(int number) 
    { 
        /* special case */ 
        if(number == 0) 
        { 
            return "zero"; 
        } 
 
        String prefix = ""; 
 
        if(number < 0) 
        { 
            number = -number; 
            prefix = "negative"; 
        } 
 
        String soFar = ""; 
        int place = 0; 
 
        do 
        { 
            int n = number % 1000; 
            if(n != 0) 
            { 
                String s = convertLessThanOneThousand(n); 
                soFar = s + majorNames[place] + soFar; 
            } 
            place++; 
            number /= 1000; 
        } 
        while(number > 0); 
 
        return (prefix + soFar).trim(); 
    } 
 
    public static void main(String[] args) 
    { 
        EnglishDecimalFormat f = new EnglishDecimalFormat(); 
        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(1316)); 
        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(9000000)); 
        System.out.println("*** " + f.convert(123456789)); 
        System.out.println("*** " + f.convert(-45)); 
        /* 
        *** zero 
        *** one 
        *** sixteen 
        *** one hundred 
        *** one hundred eighteen 
        *** two hundred 
        *** two hundred nineteen 
        *** eight hundred 
        *** eight hundred one 
        *** one thousand three hundred sixteen 
        *** one million 
        *** two million 
        *** three million two hundred 
        *** seven hundred thousand 
        *** nine million 
        *** one hundred twenty three million four hundred fifty six thousand seven hundred eighty nine 
        *** negative fourty five 
        */ 
    } 
}
С Уважением Сергей Чикирев
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.