Английские числительные (сумма прописью на английском)
От: Luchnik Россия  
Дата: 02.07.03 09:24
Оценка:
Господа, помогите, пожалуйста, кто чем может !
Нужно написать код по преобразованию чисел в английские числительные (сумма прописью на английском).
А с английским у меня не очень.
Re: Английские числительные (сумма прописью на английском)
От: Limonadni Joe Россия  
Дата: 02.07.03 10:47
Оценка:
Попробуй translate.ru. В принципе надо только знать переводы цифр, а так, в английском — почти так же, как и в русском: пять (Five) тысяч (thousand) девятьсот (nine hundred) одиннадцать (eleven)
Re: Английские числительные (сумма прописью на английском)
От: UnLucky Беларусь Qulix Systems
Дата: 02.07.03 11:16
Оценка:
Здравствуйте, Luchnik, Вы писали:

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

L>Нужно написать код по преобразованию чисел в английские числительные (сумма прописью на английском).
L>А с английским у меня не очень.

Очень просто, но все равно будет стоять у Тебя ограничение на максимальную сумму, да и на дробность. Но тем не менее. Можно решить вопрос так:
1. Проверяешь сколько цифр в числе (если число представляется строкой, то это делается функцией strlen())
2. Если цифр больше 2, то выводишь название цифры, иначе переходишь на шаг 6.
1 — one
2 — two
3 — three
4 — four
5 — five
6 — siz
7 — seven
8 — eight
9 — nine
3. В зависимости от того, сколько было чисел выводишь hundred (сотни), thousand(тысячи) , millions (миллионы) и т.д.
Следует заметить, что надо учесть, если была единица, то выводится hundred, millionБ в остальных случаях добавляется sю Но !!! thousand всегда остается thousand (Таковы, насколько я помню, правила английской речи). При нуле ничего не выводишь
4. Удаляешь эту цифру из начала.
5. Переходишь на шаг 1
6. Если цифр две и перед эти были сотни, то выводишь слово "and" (если конечно, остальные не 00)
7. Оставшиеся две цифры выводить так:
если первая 0, то просто вывести цифры.
Если 1:
10 — ten
11 — eleven
12 — twelve
13 — thirteen
14 — fourteen
15 — fifteen
16 — sixteen
17 — seventeen
18 — eighteen
19 — nineteen
Если 2, то вывести twenty и цифры
Если 3, то вывести thirty и цифры
Если 4, то вывести forty и цифры
Если 5, то вывести fifty и цифры
Если 6, то вывести sixty и цифры
Если 7, то вывести seventy и цифры
Если 8, то вывести eighty и цифры
Если 9, то вывести ninety и цифры

Ну, надеюсь, я хоть чуть-чуть помог?
Aleksandr Sly
Re[2]: Английские числительные (сумма прописью на английском
От: UGN  
Дата: 02.07.03 15:46
Оценка: 10 (1)
Здравствуйте, UnLucky, Вы писали:

UL> Следует заметить, что надо учесть, если была единица, то выводится hundred, millionБ в остальных случаях добавляется sю Но !!! thousand всегда остается thousand (Таковы, насколько я помню, правила английской речи).


Числительные hundred, thousand, million не принимают окончания -s во множественном числе:
three hundred
four thousand
five million
3,005,240 three million five thousand two hundred and forty.
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...
Пока на собственное сообщение не было ответов, его можно удалить.