Перевод целого неотрицательного числа из строкового представления в прописноеDelphi , Синтаксис , ПреобразованияПеревод целого неотрицательного числа из строкового представления в прописное
Автор: Александр { **** UBPFD *********** by delphibase.endimus.com **** >> Перевод целого неотрицательного числа из строкового представления в прописное дык выше было, не попавшее туда будет в примере примечание: код легко расширяется как на знак входных данных так и на диапазон Зависимости: ничего сверхестественного Автор: Александр Copyright: default Дата: 14 февраля 2004 г. ***************************************************** } const Mas1: array['0'..'9', 1..3] of string = (('', '', ''), ('сто ', '', 'один '), ('двести ', 'двадцать ', 'два '), ('триста ', 'тридцать ', 'три '), ('четыреста ', 'сорок ', 'четыре '), ('пятьсот ', 'пятьдесят ', 'пять '), ('шестьсот ', 'шестьдесят ', 'шесть '), ('семьсот ', 'семьдесят ', 'семь '), ('восемьсот ', 'восемьдесят ', 'восемь '), ('девятьсот ', 'девяносто ', 'девять ')); Mas2: array['0'..'9'] of string = ('десять ', 'одиннадцать ', 'двенадцать ', 'тринадцать ', 'четырнадцать ', 'пятнадцать ', 'шестнадцать ', 'семнадцать ', 'восемнадцать ', 'девятнадцать '); Mas3: array['1'..'2'] of string = ('одна ', 'две '); Mas4: array['0'..'9', 1..4] of string = (('', 'тысяч ', 'миллионов ', 'миллиардов '), ('', 'тысяча ', 'миллион ', 'миллиард '), ('', 'тысячи ', 'миллиона ', 'миллиарда '), ('', 'тысячи ', 'миллиона ', 'миллиарда '), ('', 'тысячи ', 'миллиона ', 'миллиарда '), ('', 'тысяч ', 'миллионов ', 'миллиардов '), ('', 'тысяч ', 'миллионов ', 'миллиардов '), ('', 'тысяч ', 'миллионов ', 'миллиардов '), ('', 'тысяч ', 'миллионов ', 'миллиардов '), ('', 'тысяч ', 'миллионов ', 'миллиардов ')); function GetRepresentationInWords(S: string): string; var i: Byte; Str: PChar; begin Result := ''; if S = '' then Exit; for i := 1 to Length(S) do if S[i] <> '0' then Break; if i = Length(S) + 1 then begin Result := 'Ноль'; Exit end; Str := @S[1]; while Length(S) mod 3 <> 0 do Insert('0', S, 1); for i := Length(S) div 3 downto 1 do begin if (Str[0] = '0') and (Str[1] = '0') and (Str[2] = '0') then begin Inc(Str, 3); Continue; end; Result := Result + Mas1[Str[0], 1]; if Str[1] = '1' then Result := Result + Mas2[Str[2]] + Mas4['0', i] else begin Result := Result + Mas1[Str[1], 2]; if (i = 2) and (Str[2] in ['1'..'2']) then Result := Result + Mas3[Str[2]] else Result := Result + Mas1[Str[2], 3]; Result := Result + Mas4[Str[2], i]; end; Inc(Str, 3) end; SetLength(Result, Length(Result) - 1) end; Пример использования: Memo1.Lines.Text := GetRepresentationInWords(IntToStr(High(Cardinal))); Статья Перевод целого неотрицательного числа из строкового представления в прописное раздела Синтаксис Преобразования может быть полезна для разработчиков на Delphi и FreePascal. Комментарии и вопросыМатериалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Преобразования ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |