Генерировать текстовое представление числа

Составить проект, который при введении числа будет генерировать его текстовое

представление, например, 2035 – «две тысячи тридцать пять».

Это называется “прописью”.

Гугл выдает кучу вариантов, например,
Запись числа прописью - Программирование на языке Паскаль - Каталог статей - Неверов Евгений Викторович

выдрал откуда-то из тьмы веков такое решение

function currency2Str (value: double): string;
const hundreds: array [0..9] of string = ('',' сто',' двести',' триста',' четыреста',' пятьсот',' шестьсот',' семьсот',' восемьсот',' девятьсот');

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

var s: string; i: integer; val: int64;


function shortNum(s: string; raz: integer): string;
begin
  Result:=hundreds[StrToInt(s[1])]; if StrToInt(s)=0 then Exit;
  if s[2]<>'1' then begin
    Result:=Result+tens[StrToInt(s[2])];
    case StrToInt(s[3]) of
      1: if raz=1 then Result:=Result+' одна' else Result:=Result+' один';
      2: if raz=1 then Result:=Result+' две' else Result:=Result+' два';
    else Result:=Result+ones[StrToInt(s[3])];
  end;
  Result:=Result+razryad[raz];
  case StrToInt(s[3]) of
    0,5,6,7,8,9: if raz>1 then Result:=Result+'ов';
    1: if raz=1 then Result:=Result+'а';
    2,3,4: if raz=1 then Result:=Result+'и' else if raz>1 then Result:=Result+'а';
  end;
  end else begin
    Result:=Result+ones[StrToInt(Copy(s,2,2))];
    Result:=Result+razryad[raz];
    if raz>1 then Result:=Result+'ов';
  end;
end;

begin
  val:=Trunc(value);
  if val=0 then begin Result:='ноль'; Exit; end;
  s:=IntToStr(val); Result:=''; i:=0;
  while Length(s)>0 do begin
    Result:=shortNum(Copy('00'+s,Length('00'+s)-2,3),i)+Result;
    if Length(s)>3 then s:=Copy(s,1,Length(s)-3) else s:='';
    inc(i);
  end;
  Result := Trim(Result)
end;

для проверки киньте Button1, Edit1 и Label1
в на клик кнопки код:

Код:

Label1.Caption := currency2Str( StrToFloat(edit1.Text) );

p.s. копирайт на код не мой. откуда-то выдрал. откуда, сорри, уже не помню…

1 лайк

суть в том что на делфи, а значит интерфейс и до 4-х значного числа

Так просто поле ввода добавить и по кнопке вызвать функцию )

@Dokar , выше я привёл функцию. И даже описал как её использовать в Delphi
поле ввода и кнопку не сложно кинуть на форму.
правда, судя по коду, там и до квинтиллиона числа поддерживаются (ну, т.е. больше, чем четыре разряда ;))

Благодарю, позже проверю просто поздно уже

Да да я всё вижу. Ещё раз спасибо!