Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Число прописью 2

Delphi , Синтаксис , Текст и Строки

Сумма прописью - Способ 2


{ Преобразует трехзначное число в строку }
function ConvertToWord(N: word): string;
const
  Sot : array[1..9] of string[13] =
  ('сто','двести','триста','четыреста','пятьсот',
  'шестьсот','семьсот','восемьсот','девятьсот');

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

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

var
  S: string;
begin
  S:='';
  N:=N mod 1000;
  if N>99 then
  begin
    S:=Sot[N div 100]+' ';
    N:=N mod 100;
  end;
  if N>19 then
  begin
    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 then
  begin
    if N>999999 then
    begin
      k:=N div 1000000;
      S:=ConvertToWord(k);
      if ((k-(k div 100)*100)>10) and ((k-(k div 100)*100)<20) then
        S:=S+' миллионов'
      else
      if (k mod 10)=1 then
        S:=S+' миллион'
      else
      if ((k mod 10)>=2)and((k mod 10)<=4) then
        S:=S+' миллиона'
      else
        S:=S+' миллионов';
      N:=N mod 1000000;
    end;
    if N>999 then
    begin
      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+' тысяч'
      else
      if (k mod 10)=1 then
      begin
        SetLength(S, Length(S)-2);
        S:=S+'на тысяча';
      end
      else
      if (k mod 10)=2 then
      begin
        SetLength(S, length(S)-1);
        S:=S+'е тысячи';
      end
      else
      if ((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+' рублей'
    else
    if (k mod 10)=1 then
      S:=S+' рубль'
    else
    if (k mod 10)=2 then
      S:=S+' рубля'
    else
    if ((k mod 10)>=3)and((k mod 10)<=4) then
      S:=S+' рубля'
    else
      S:=S+' рублей';
  end;
  if trunc(R)<>R then
  begin
    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+' копеек'
    else
    if (k mod 10)=1 then
    begin
      S:=S+' копейка';
    end
    else
    if (k mod 10)=2 then
    begin
      S:=S+' копейки';
    end
    else
    if ((k mod 10)>=3)and((k mod 10)<=4) then
      S:=S+' копейки'
    else
      S:=S+' копеек';
  end
  else
    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, которые содержат письменные формы сотен, десятков и единиц соответственно.

Функция работает следующим образом:

  1. Конвертирует входное число в строку (S) путем перебора массивов.
  2. Разделяет входное число на 1000, чтобы получить цифру тысяч, и добавляет ее письменную форму к S.
  3. Если оставшееся число больше 19, разделяет его на 10, чтобы получить цифру десятков, и добавляет ее письменную форму к S.
  4. Наконец, добавляет письменную форму единиц к S.

Функция CenaToStr

Эта функция принимает значение валюты (R) в качестве входного параметра и возвращает ее письменную форму в виде строки. Она использует функцию ConvertToWord, чтобы конвертировать целую часть значения валюты в ее письменную форму.

Функция работает следующим образом:

  1. Извлекает целую часть значения валюты с помощью trunc.
  2. Конвертирует целую часть в ее письменную форму с помощью функции ConvertToWord.
  3. Если оставшаяся дробная часть не равна нулю, конвертирует ее в строку и добавляет "копеек" (или правильный множественный форм) к результату.
  4. Обрезает полученную строку и капитализирует первый символ.

Некоторые предложения по улучшению:

  • Рассмотреть использование более robust способа обработки значений валют, например, с помощью отдельной библиотеки или фреймворка.
  • Функция ConvertToWord могла быть сделана более эффективной путем использования одиночной петли вместо трех отдельных петель.
  • Функция CenaToStr могла быть упрощена путем использования более компактного подхода к добавлению письменной формы дробной части.

В целом, это полезная программа, которая может помочь с конвертацией значений валют в их письменные формы на русском языке. С некоторыми улучшениями она могла бы стать еще более эффективной и эффективной!

В статье описывается способ преобразования чисел в строковые представления на русском языке с использованием функций ConvertToWord и CenaToStr.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Текст и Строки ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 13:22:29/0.0057070255279541/1