Советы по Delphi

Число строкой VIII


function NumToStr(n: double; c: byte = 0): string;
(*
c=0 - 21.05 -> 'Двадцать один рубль 05 копеек.'с=1 - 21.05 -> 'двадцать один'c=2 - 21.05 -> '21-05', 21.00 -> '21='*)
const
digit: array[0..9] of string = ('ноль', 'оди', 'два', 'три', 'четыр','пят', 'шест', 'сем', 'восем', 'девят');var
ts, mln, mlrd, SecDes: Boolean;len: byte;summa: string;
function NumberString(number: string): string;vard, pos: byte;
function DigitToStr: string;beginresult := '';if (d <> 0) and ((pos = 11) or (pos = 12)) then mlrd := true;if (d <> 0) and ((pos = 8) or (pos = 9)) then mln := true;if (d <> 0) and ((pos = 5) or (pos = 6)) then ts := true;if SecDes thenbegincase d of0: result := 'десять ';2: result := 'двенадцать 'else result:=digit[d]+'надцать 'end;case pos of4: result := result + 'тысяч ';7: result := result + 'миллионов ';10: result := result + 'миллиардов 'end;SecDes := false;mln := false;mlrd := false;ts := falseendelsebeginif (pos = 2) or (pos = 5) or (pos = 8) or (pos = 11) thencase d of1: SecDes := true;2, 3: result := digit[d] + 'дцать ';4: result := 'сорок ';9: result := 'девяносто ';5..8: result := digit[d] + 'ьдесят 'end;if (pos = 3) or (pos = 6) or (pos = 9) or (pos = 12) thencase d of1: result := 'сто ';2: result := 'двести ';3: result := 'триста ';4: result := 'четыреста ';5..9: result:=digit[d]+'ьсот 'end;if (pos = 1) or (pos = 4) or (pos = 7) or (pos = 10) thencase d of1: result := 'один ';2,3: result := digit[d] + ' ';4: result := 'четыре ';5..9: result := digit[d] + 'ь 'end;if pos = 4 Thenbegincase d of0: if ts then result := 'тысяч ';1: result := 'одна тысяча ';2: result := 'две тысячи ';3,4: result := result + 'тысячи ';5..9: result := result + 'тысяч 'end;ts := falseend;if pos = 7 thenbegincase d of0: if mln then result := 'миллионов ';1: result := result + 'миллион ';2, 3, 4: result := result + 'миллиона ';5..9: result := result + 'миллионов 'end;mln := falseend;if pos = 10 thenbegincase d of0: if mlrd then result := 'миллиардов ';1: result := result + 'миллиард ';2, 3, 4: result := result + 'миллиарда ';5..9: result := result + 'миллиардов 'end;mlrd := falseendendend;
beginresult := '';ts := false;mln := false;mlrd := false;SecDes := false;len := length(number);if (len = 0) or (number = '0') thenresult := digit[0]elsefor pos := len downto 1 dobegind := StrToInt(copy(number, len - pos + 1, 1));result := result + DigitToStrendend;
function MoneyString(number: string): string;vars: string[1];n: string;beginlen := length(number);n := copy(number, 1, len-3);result := NumberString(n);s := AnsiUpperCase(result[1]);delete(result, 1, 1);result := s + result;if len < 2 thenbeginif len = 0 then n := '0';len := 2;n := '0' + nend;if copy(n, len - 1, 1) = '1' thenresult := result + 'рублей'elsebegincase StrToInt(copy(n, len, 1)) of1: result := result + 'рубль';2, 3, 4: result := result + 'рубля'else result := result + 'рублей'endend;len := length(number);n := copy(number, len - 1, len);if copy(n, 1, 1) = '1' thenn := n + ' копеек.'elsebegincase StrToInt(copy(n, 2, 1)) of1: n := n + ' копейка.';2, 3, 4: n := n + ' копейки.'else n := n + ' копеек.'endend;result := result + ' ' + nend;
// Основная часть
begin
case
c of0: result := MoneyString(FormatFloat('0.00', n));1: result := NumberString(FormatFloat('0', n));2: beginsumma := FormatFloat('0.00', n);len := length(summa);if copy(summa, len - 1, 2) = '00' thenbegindelete(summa, len - 2, 3);result := summa + '='endelsebegindelete(summa, len - 2, 1);insert('-', summa, len - 2);result := summa;end;endend;end;

С уважением, Васильев Сергей Геннадьевич, Благовещенск, vs2000@mail.ru [000580]



Содержание раздела