Господа, помогите, пожалуйста, кто чем может !
Нужно написать код по преобразованию чисел в английские числительные (сумма прописью на английском).
А с английским у меня не очень.
Re: Английские числительные (сумма прописью на английском)
Попробуй translate.ru. В принципе надо только знать переводы цифр, а так, в английском — почти так же, как и в русском: пять (Five) тысяч (thousand) девятьсот (nine hundred) одиннадцать (eleven)
Re: Английские числительные (сумма прописью на английском)
Здравствуйте, 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]: Английские числительные (сумма прописью на английском
Здравствуйте, 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: Английские числительные (сумма прописью на английском)
Здравствуйте, 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
*/
}
}