Показать сообщение отдельно
  #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;
Ответить с цитированием