{ Преобразует трехзначное число в строку }function ConvertToWord(N: word): string;
const
Sot : array[1..9] ofstring[13] =
('сто','двести','триста','четыреста','пятьсот',
'шестьсот','семьсот','восемьсот','девятьсот');
Des : array[2..9] ofstring[13] =
('двадцать','тридцать','сорок','пятьдесят',
'шестьдесят','семьдесят','восемьдесят','девяносто');
Edin : array[0..19] ofstring[13] =
('','один','два','три','четыре','пять','шесть','семь',
'восемь','девять','десять','одиннадцать','двенадцать',
'тринадцать','четырнадцать','пятнадцать',
'шестнадцать','семнадцать','восемнадцать','девятнадцать');
var
S: string;
begin
S:='';
N:=N mod 1000;
if N>99 thenbegin
S:=Sot[N div 100]+' ';
N:=N mod 100;
end;
if N>19 thenbegin
S:=S+Des[N div 10]+' ';
N:=N mod 10;
end;
Result:=S+Edin[N];
end;
{ Возвращает сумму прописью }function CenaToStr(r: Currency): string;
var
N, k: longint;
S: string;
begin
N:=trunc(R); S:='';
if N<>0 thenbeginif N>999999 thenbegin
k:=N div 1000000;
S:=ConvertToWord(k);
if ((k-(k div 100)*100)>10) and ((k-(k div 100)*100)<20) then
S:=S+' миллионов'
elseif (k mod 10)=1 then
S:=S+' миллион'
elseif ((k mod 10)>=2)and((k mod 10)<=4) then
S:=S+' миллиона'
else
S:=S+' миллионов';
N:=N mod 1000000;
end;
if N>999 thenbegin
k:=N div 1000;
S:=S+' '+ConvertToWord(k);
if ((k-(k div 100)*100)>10)and((k-(k div 100)*100)<20) then
S:=S+' тысяч'
elseif (k mod 10)=1 thenbegin
SetLength(S, Length(S)-2);
S:=S+'на тысяча';
endelseif (k mod 10)=2 thenbegin
SetLength(S, length(S)-1);
S:=S+'е тысячи';
endelseif ((k mod 10)>=3)and((k mod 10)<=4) then
S:=S+' тысячи'
else
S:=S+' тысяч';
N:=N mod 1000;
end;
k:=N;
S:=S+' '+ConvertToWord(k);
if ((k-(k div 100)*100)>10)and((k-(k div 100)*100)<20) then
S:=S+' рублей'
elseif (k mod 10)=1 then
S:=S+' рубль'
elseif (k mod 10)=2 then
S:=S+' рубля'
elseif ((k mod 10)>=3)and((k mod 10)<=4) then
S:=S+' рубля'
else
S:=S+' рублей';
end;
if trunc(R)<>R thenbegin
k:=round(frac(R)*100);
S:=S+' '+IntToStr(K);
if ((k-(k div 100)*100)>10)and((k-(k div 100)*100)<20) then
S:=S+' копеек'
elseif (k mod 10)=1 thenbegin
S:=S+' копейка';
endelseif (k mod 10)=2 thenbegin
S:=S+' копейки';
endelseif ((k mod 10)>=3)and((k mod 10)<=4) then
S:=S+' копейки'
else
S:=S+' копеек';
endelse
S:=S+' 00 копеек';
S:=Trim(S);
if S<>'' then
S[1]:=AnsiUpperCase(S[1])[1];
result:=S;
end;
Программа на Delphi, которая конвертирует значение валюты в ее письменную форму на русском языке. Код состоит из двух функций: ConvertToWord и CenaToStr. Пусть нас разберем их:
Функция ConvertToWord
Эта функция принимает целое число N в качестве входного параметра и возвращает его письменную форму в виде строки. Она использует три массива: Sot, Des и Edin, которые содержат письменные формы сотен, десятков и единиц соответственно.
Функция работает следующим образом:
Конвертирует входное число в строку (S) путем перебора массивов.
Разделяет входное число на 1000, чтобы получить цифру тысяч, и добавляет ее письменную форму к S.
Если оставшееся число больше 19, разделяет его на 10, чтобы получить цифру десятков, и добавляет ее письменную форму к S.
Наконец, добавляет письменную форму единиц к S.
Функция CenaToStr
Эта функция принимает значение валюты (R) в качестве входного параметра и возвращает ее письменную форму в виде строки. Она использует функцию ConvertToWord, чтобы конвертировать целую часть значения валюты в ее письменную форму.
Функция работает следующим образом:
Извлекает целую часть значения валюты с помощью trunc.
Конвертирует целую часть в ее письменную форму с помощью функции ConvertToWord.
Если оставшаяся дробная часть не равна нулю, конвертирует ее в строку и добавляет "копеек" (или правильный множественный форм) к результату.
Обрезает полученную строку и капитализирует первый символ.
Некоторые предложения по улучшению:
Рассмотреть использование более robust способа обработки значений валют, например, с помощью отдельной библиотеки или фреймворка.
Функция ConvertToWord могла быть сделана более эффективной путем использования одиночной петли вместо трех отдельных петель.
Функция CenaToStr могла быть упрощена путем использования более компактного подхода к добавлению письменной формы дробной части.
В целом, это полезная программа, которая может помочь с конвертацией значений валют в их письменные формы на русском языке. С некоторыми улучшениями она могла бы стать еще более эффективной и эффективной!
В статье описывается способ преобразования чисел в строковые представления на русском языке с использованием функций ConvertToWord и CenaToStr.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.