Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сумма прописъю, разыскивую готовый кусок кода 
V
    Опции темы
Sleepy_PIP
Дата 24.4.2006, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 30.6.2004
Где: Moscow

Репутация: 4
Всего: 12



Надо очень срочно написать преобразование суммы в русское строчное представление (123 - Сто двадцать три)
Стандартнай штука.
Но не успеваю (еще и других дел много %( ).
Порыля в инете 5 минут - не нашел сорцов.
Неужели каждый для себя ее по новой выписывает?
Может у кого есть ссылка на исходники?
надоело велосипеды изобретать smile
Спасибо!
 


--------------------
--
Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем
свободным ..."
PM MAIL ICQ   Вверх
LSD
Дата 24.4.2006, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Посмотри здесь, там правда для VB, но думаю не составит труда его перевести на Java. 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
glukochillo
Дата 26.4.2006, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 16.3.2006

Репутация: 1
Всего: 1



У меня есть код, правда он громоздкий:
Код

private static String sumInWord(double totalSum, int depth)
    {
        String[] orders = new String[]{"рубль","рубля","рублей","тысяча","тысячи","тысяч","миллион","миллиона","миллионов","миллиард","миллиарда","миллиардов"};
        String[] valuesThousand = new String[]{"одна","две","три","четыре","пять","шесть","семь","восемь","девять","десять","одиннадцать","двенадцать","тринадцать","четырнадцать","пятнадцать","шестнадцать","семнадцать","восемнадцать","девятнадцать"};
        String[] valuesMills = new String[]{"один","два","три","четыре","пять","шесть","семь","восемь","девять","десять","одиннадцать","двенадцать","тринадцать","четырнадцать","пятнадцать","шестнадцать","семнадцать","восемнадцать","девятнадцать"};
        String[] valuesTens = new String[]{"десять","двадцать","тридцать","сорок","пятьдесят","шестьдесят","семьдесят","восемьдесят","девяносто"};
        String[] valuesHundreds = new String[]{"сто","двести","триста","четыреста","пятьсот","шестьсот","семьсот","восемьсот","девятьсот"};
        String s = "";

        if ((int)(totalSum / 1000) > 0)
        {
            if (depth < 3)   s = s.concat(sumInWord(totalSum / 1000, depth + 1));
            else return "Слишком большое число";
        }
        totalSum %= 1000;

        //анализ сотен
        if ((int)(totalSum / 100) > 0)
        {
            s = s.concat(" ");
            s = s.concat(valuesHundreds[(int)(totalSum / 100) - 1]);
        }
        totalSum %= 100;

        //анализ десятков
        if ((int)(totalSum / 10) > 0)
        {
            s = s.concat(" ");
            if ((int)(totalSum / 10) == 1)
            {
                s = s.concat(valuesMills[(int)totalSum - 1]);
                s = s.concat(" ").concat(orders[depth * 3 + 2]);
            }
            else
            {
                s = s.concat(valuesTens[(int)(totalSum / 10) - 1]);
            }
        }
        //анализ единиц
        if ((int)(totalSum / 10) != 1)
        {

            if ((int)totalSum != 0)
            {

                if ((int)totalSum % 10 != 0)
                {
                    s = s.concat(" ");
                    if (depth != 1)
                    {
                        s = s.concat(valuesMills[(int)(totalSum % 10) - 1]);
                    }
                    else
                    {
                        s = s.concat(valuesThousand[(int)(totalSum % 10) -1]);
                    }
                }
            }
            else
            {
                if (depth == 0)   s = s.concat("ноль целых");
            }

            if ((int)totalSum != 0)
            {
                s = s.concat(" ");
                switch ((int)(totalSum % 10))
                {
                    case 0:
                    case 5:
                    case 6:
                    case 7:
                    case 8:
                    case 9:s = s.concat(orders[depth * 3 + 2]);break;
                    case 1:s = s.concat(orders[depth * 3 + 0]);break;
                    case 2:
                    case 3:
                    case 4:s = s.concat(orders[depth * 3 + 1]);break;
                }
            }
        }
        //анализ сотых
        if (depth == 0)
        {
            totalSum *= 100;
            totalSum %= 100;
            if (Math.floor(totalSum) != Math.floor(totalSum + 0.1))
            totalSum = Math.floor(totalSum + 0.1);
            else
            totalSum = Math.floor(totalSum);


            if ((int)(totalSum / 10) > 0)
            {
                s = s.concat(" ");
                if ((int)(totalSum / 10) == 1)
                {
                    s = s.concat(valuesMills[(int)totalSum - 1]);
                    s = s.concat(" копеек");
                }
                else
                {
                    s = s.concat(valuesTens[(int)(totalSum / 10) - 1]);
                }
            }
            if ((int)(totalSum / 10) != 1)
            {

                if ((int)totalSum != 0 && (int)totalSum % 10 != 0)
                {
                    s = s.concat(" ");
                    s = s.concat(valuesThousand[(int)(totalSum % 10) - 1]);
                }

                if ((int)totalSum != 0)
                {
                    s = s.concat(" ");
                    switch ((int)(totalSum % 10))
                    {
                        case 2:
                        case 3:
                        case 4:s = s.concat("копейки");break;
                        case 0:
                        case 5:
                        case 6:
                        case 7:
                        case 8:
                        case 9:s = s.concat("копеек");break;
                        case 1:s = s.concat("копейка");break;
                    }
                }
            }
        }
        return s;
    }

Вызывать метод лучше так
Код

sumInWord((float) xxx, 0);

где ххх - ваше число.

Писал на скорую руку, так что если какие баги найдете или знаете как упростить пишите - буду признателен. 
PM MAIL   Вверх
Sleepy_PIP
Дата 26.4.2006, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 30.6.2004
Где: Moscow

Репутация: 4
Всего: 12



Большое СПАСИБО!.
только я уже успел наваять свое smile.
http://forum.vingrad.ru/index.php?act=ST&a...90&unread=1

 


--------------------
--
Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем
свободным ..."
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0917 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.