Конвертация денежных сумм в строковое выражениеDelphi , Синтаксис , Текст и Строки
Автор: Раков Андрей { **** UBPFD *********** by delphibase.endimus.com **** >> Конвертация денежных сумм в строковое выражение впоть до додециллиона, причем легко наращивается. Небольшая по размеру. Зависимости: System Автор: Раков Андрей, klopmail@mail.ru, Курчатов Copyright: Раков А.В. Дата: 17 августа 2002 г. ***************************************************** } function MoneyToStr(DD: string): string; {(С) Раков А.В. 05.2002 e-mail: klopmail@mail.ru сайт: http://www.kursknet.ru/~klop} type TTroyka = array[1..3] of Byte; TMyString = array[1..19] of string[12]; var S, OutS, S2: string; k, L, kk: Integer; Troyka: TTroyka; V1: TMyString; Mb: Byte; const V11: TMyString = ('один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять', 'десять', 'одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать'); V2: array[1..8] of string = ('двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто'); V3: array[1..9] of string = ('сто', 'двести', 'триста', 'четыреста', 'пятьсот', 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот'); M1: array[1..13, 1..3] of string = (('тысяча', 'тысячи', 'тысяч'), ('миллион', 'миллиона', 'миллионов'), ('миллиард', 'миллиарда', 'миллиардов'), ('триллион', 'триллиона', 'триллионов'), ('квадриллион', 'квадриллиона', 'квадриллионов'), ('квинтиллион', 'квинтиллиона', 'квинтиллионов'), ('секстиллион', 'секстиллиона', 'секстиллионов'), ('сентиллион', 'сентиллиона', 'сентиллионов'), ('октиллион', 'октиллиона', 'октиллионов'), ('нониллион', 'нониллиона', 'нониллионов'), ('дециллион', 'дециллиона', 'дециллионов'), ('ундециллион', 'ундециллиона', 'ундециллионов'), ('додециллион', 'додециллиона', 'додециллионов')); R1: array[1..3] of string = ('рубль', 'рубля', 'рублей'); R2: array[1..3] of string = ('копейка', 'копейки', 'копеек'); function TroykaToStr(L: ShortInt; TR: TTroyka): string; var S: string; begin S := ''; if Abs(L) = 1 then begin V1[1] := 'одна'; V1[2] := 'две'; end else begin V1[1] := 'один'; V1[2] := 'два'; end; if Troyka[2] = 1 then begin Troyka[2] := 0; Troyka[3] := 10 + Troyka[3]; end; if Troyka[3] <> 0 then S := V1[Troyka[3]]; if Troyka[2] <> 0 then S := V2[Troyka[2] - 1] + ' ' + S; if Troyka[1] <> 0 then S := V3[Troyka[1]] + ' ' + S; if (L > 0) and (S <> '') then case Troyka[3] of 1: S := S + ' ' + M1[L, 1] + ' '; 2..4: S := S + ' ' + M1[L, 2] + ' '; else S := S + ' ' + M1[L, 3] + ' '; end; TroykaToStr := S; end; begin V1 := V11; L := 0; OutS := ''; kk := Pos(',', DD); if kk = 0 then S := DD else S := Copy(DD, 1, kk - 1); if S = '0' then S2 := '' else S2 := S; repeat for k := 3 downto 1 do if Length(S) > 0 then begin Troyka[k] := StrToInt(S[Length(S)]); Delete(S, Length(S), 1); end else Troyka[k] := 0; OutS := TroykaToStr(L, Troyka) + OutS; if L = 0 then Mb := Troyka[3]; Inc(L); until Length(S) = 0; case Mb of 0: if Length(S2) > 0 then OutS := OutS + ' ' + R1[3] + ' '; 1: OutS := OutS + ' ' + R1[1] + ' '; 2..4: OutS := OutS + ' ' + R1[2] + ' '; else OutS := OutS + ' ' + R1[3] + ' '; end; S2 := ''; if kk <> 0 then begin DD := Copy(DD, kk + 1, 2); if Length(DD) = 1 then DD := DD + '0'; k := StrToInt(DD); Troyka[1] := 0; Troyka[2] := k div 10; Troyka[3] := k mod 10; S2 := TroykaToStr(-1, Troyka); case Troyka[3] of 0: if Troyka[2] = 0 then S := '' else S := R2[3]; 1: S := R2[1]; 2..4: S := R2[2]; else S := R2[3]; end; end; // MoneyToStr:=OutS+IntToStr(k)+' '+S; // если копейки нужны цифрой-эту строку раскоментировать MoneyToStr := OutS + S2 + ' ' + S; // а эту закоментировать end; Пример использования: S := MoneyToStr('76576876876976576437654365,98'); Программная функция Delphi для конвертации денежных сумм в строку! Эта реализация довольно обширна и охватывает широкий спектр валютных номиналов, от рублей и копеек до дodecillion. Код включает несколько массивов и констант, которые определяют названия чисел, денежные единицы и их множественные формы. Функция Вот шаг за шагом, как функция работает:
Код включает несколько примеров использования этой функции, включая пример ввода В целом, эта реализация довольно обширна и должна быть в состоянии обработать большинство конвертаций валют с высокой точностью. Однако она может потребовать некоторых модификаций или обновлений для адаптации к конкретным региональным или культурным вариациям названий денежных единиц. Вот несколько предложений по улучшению:
Надеюсь, это поможет! Позвоните мне, если у вас есть вопросы или вам нужна дополнительная помощь. Конвертация денежных сумм в строковое выражение вплоть до додециллиона. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Текст и Строки ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |