Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Синтаксис
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.07.2011, 13:31
chainik chainik вне форума
Начинающий
 
Регистрация: 30.06.2008
Сообщения: 140
Репутация: 8882
По умолчанию сумма прописью

Уважаемые посетители форума
--------------------------------------
Я несколько раз натыкался на форуме на запросы как перевести число в словесное выражение
И это сподвигло меня на написание такой функции
Проверял, багов вроде нет...
Понимает числа до 999 миллионов
Если надо больше- пусть Кудрин дает заказ- сделаю миллиарды.
Может кому- то пригодится....


Код:
{-------------------------------------------------------------------------------
    возвращает  числительное прописью
--------------------------------------------------------------------------------}
function GetNumeralStr(Num:dword):string;
const
ss0:array[0..19] of string[50]=('','один','два','три','четыре','пять','шесть','семь',
                            'восемь','девять','десять','одиннадцать','двенадцать','тринадцать',
                            'четырнадцать','пятнадцать','шестнадцать','семнадцать',
                            'восемнадцать','девятнадцать');

ss10:array[0..9] of string[50]=('','','двадцать','тридцать','сорок','пятьдесят','шестьдесят',
                            'семьдесят','восемьдесят','девяносто');

ss100:array[0..9] of string[50]=('','сто','двести','триста','четыреста',
                            'пятьсот','щестьсот','семьсот','восемьсот','девятьсот');

ss1000:array[0..19] of string[50]=('тысяч','одна тысяча','две тысячи','три тысячи',
                            'четыре тысячи','пять тысяч','шесть тысяч','семь тысяч',
                            'восемь тысяч','девять тысяч','десять тысяч',
                            'одиннадцать тысяч','двенадцать тысяч','тринадцать тысяч',
                            'четырнадцать тысяч','пятнадцать тысяч',
                            'шестнадцать тысяч','семнадцать тысяч',
                            'восемнадцать тысяч','девятнадцать тысяч');

ssM:array[0..19] of string[50]=('миллионов','один миллион','два миллиона','три миллиона',
                            'четыре миллиона','пять миллионов','шесть миллионов','семь миллионов',
                            'восемь миллионов','девять миллионов','десять миллионов',
                            'одиннадцать миллионов','двенадцать миллионов','тринадцать миллионов',
                            'четырнадцать миллионов','пятнадцать миллионов',
                            'шестнадцать миллионов','семнадцать миллионов',
                            'восемнадцать миллионов','девятнадцать миллионов');

var
Remaind:dword;
begin
Result:='';

//единицы
Remaind:=Num mod 100;
if Remaind <=19 then
    Result:=ss0[Remaind]
else
    Result:=ss10[Remaind div 10]+' '+ss0[Remaind mod 10];
Num:=Num div 100;
Result:=ss100[Num mod 10]+' '+Result;
Num:=Num div 10;

//тысячи
Remaind:=Num mod 100;
if Num mod 1000 > 0 then
    if Remaind <= 19 then
        Result:=ss1000[Remaind]+' '+Result
    else
        Result:=ss10[Remaind div 10]+' '+ss1000[Remaind mod 10]+' '+Result;
Num:=Num div 100;
Result:=ss100[Num mod 10]+' '+Result;
Num:=Num div 10;

//миллионы
Remaind:=Num mod 100;
if Num mod 1000 > 0 then
    if Remaind <= 19 then
        Result:=ssM[Remaind]+' '+Result
    else
        Result:=ss10[Remaind div 10]+' '+ssM[Remaind mod 10]+' '+Result;
Num:=Num div 100;
Result:=ss100[Num mod 10]+' '+Result;
end;
Ответить с цитированием
  #2  
Старый 06.07.2011, 21:31
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Желание показать свои возможности можно только приветствовать, но результат написания данной функции, мягко говоря, неутешителен. Слегка напоминает фразу первоклассника: "Мама мыла раму", также приелась и также бесполезна.
Ответить с цитированием
  #3  
Старый 06.07.2011, 21:55
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

Цитата:
Сообщение от angvelem
но результат написания данной функции, мягко говоря, неутешителен

Ну и чем же он неутешителен??
Ответить с цитированием
  #4  
Старый 06.07.2011, 22:29
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Дублирование слов в стрингах, как вариант пойдёт.
Ответить с цитированием
  #5  
Старый 07.07.2011, 21:09
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Отформатируй в удобочитаемый код.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:19.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter