Форум: "Базы";
Текущий архив: 2003.10.16;
Скачать: [xml.tar.bz2];
Внизперевод цифр в их словарные значения Найти похожие ветки
← →
Алекси (2003-09-26 18:31) [0]помогите кто может: перешлите алгоритм перевода цифр в буквенные значения например : 423 = четыреста двадцать три
буду очень признателен
← →
Rem (2003-09-26 18:42) [1]Не судите, люди добрые, писал недельку назад, ночью, на УПСе :D
type
TCaseForm = (cfOne, cfTwo, cfFive);
TSex = (sMale, sFemale);
function SpellRub(a_Money: currency): string;
var
S: string;
CF: TCaseForm;
T: string;
R: string;
C: string;
procedure TriadaToWords(a_sTriada: string; a_Sex: TSex; a_bSupressZero: boolean;
var a_sWords: string; var a_CaseForm: TCaseForm);
var
S: string;
begin
ASSERT(a_sTriada <> "");
a_CaseForm := cfFive;
if (Length(a_sTriada) = 1) then a_sTriada := "00" + a_sTriada;
if (Length(a_sTriada) = 2) then a_sTriada := "0" + a_sTriada;
if (a_sTriada = "000") then
begin
if a_bSupressZero then
a_sWords := ""
else
a_sWords := "ноль ";
Exit;
end;
case a_sTriada[2] of
"1": case a_sTriada[3] of
"0": S := "десять ";
"1": S := "одиннадцать ";
"2": S := "двенадцать ";
"3": S := "тринадцать ";
"4": S := "четырнадцать ";
"5": S := "пятнадцать ";
"6": S := "шестнадцать ";
"7": S := "семнадцать ";
"8": S := "восемнадцать ";
"9": S := "девятнадцать ";
end
else
begin
case a_sTriada[3] of
"1": begin S := IfThen(a_Sex = sMale, "один ", "одна "); a_CaseForm := cfOne; end;
"2": begin S := IfThen(a_Sex = sMale, "два ", "две "); a_CaseForm := cfTwo; end;
"3": begin S := "три "; a_CaseForm := cfTwo; end;
"4": begin S := "четыре "; a_CaseForm := cfTwo; end;
"5": S := "пять ";
"6": S := "шесть ";
"7": S := "семь ";
"8": S := "восемь ";
"9": S := "девять ";
end;
case a_sTriada[2] of
"2": S := "двадцать " + S;
"3": S := "тридцать " + S;
"4": S := "сорок " + S;
"5": S := "пятьдесят " + S;
"6": S := "шестьдесят " + S;
"7": S := "семьдесят " + S;
"8": S := "восемьдесят " + S;
"9": S := "девяносто " + S;
end;
end;
end;
case a_sTriada[1] of
"1": S := "сто " + S;
"2": S := "двести " + S;
"3": S := "триста " + S;
"4": S := "четыреста " + S;
"5": S := "пятьсот " + S;
"6": S := "шестьсот " + S;
"7": S := "семьсот " + S;
"8": S := "восемьсот " + S;
"9": S := "девятьсот " + S;
end;
a_sWords := S;
end;
begin
S := CurrToStr(Trunc(a_Money));
if (Length(S) mod 3 = 1) then S := "00" + S;
if (Length(S) mod 3 = 2) then S := "0" + S;
while (Length(S) > 0) do
begin
T := Copy(S, 1, 3);
case (Length(S) - 1) div 3 of
0:
begin
TriadaToWords(T, sMale, Result <> "", R, CF);
if (R <> "") then
case CF of
cfOne: R := R + "рубль";
cfTwo: R := R + "рубля";
cfFive: R := R + "рублей";
end
else
R := "рублей";
end;
1:
begin
TriadaToWords(T, sFemale, Result <> "", R, CF);
if (R <> "") then
case CF of
cfOne: R := R + "тысяча ";
cfTwo: R := R + "тысячи ";
cfFive: R := R + "тысяч ";
end;
end;
2:
begin
TriadaToWords(T, sMale, Result <> "", R, CF);
if (R <> "") then
case CF of
cfOne: R := R + "миллион ";
cfTwo: R := R + "миллиона ";
cfFive: R := R + "миллионов ";
end;
end;
3:
begin
TriadaToWords(T, sMale, Result <> "", R, CF);
if (R <> "") then
case CF of
cfOne: R := R + "миллиард ";
cfTwo: R := R + "миллиарда ";
cfFive: R := R + "миллиардов ";
end;
end;
4:
begin
TriadaToWords(T, sMale, Result <> "", R, CF);
if (R <> "") then
case CF of
cfOne: R := R + "триллион ";
cfTwo: R := R + "триллиона ";
cfFive: R := R + "триллионов ";
end;
end;
end;
Delete(S, 1, 3);
Result := Result + R;
end;
Result := AnsiUpperCase(Result[1]) + Copy(Result, 2, Length(Result) - 1);
C := Format("%2.2d", [trunc(frac(a_Money) * 100)]);
Result := Result + " " + C + " коп.";
end;
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.10.16;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c