Содержание материала

 

Code:

{ **** UBPFD *********** by delphibase.endimus ****

>> Преобразование целого числа 0-999999999 в строку (прописью)

 

Я думаю, всё итак понятно, что не понятно пишите письма

 

Зависимости: SysUtils

Автор: Алексей, ARojkov okil.ru, СПб

Copyright: b0b

Дата: 12 марта 2004 г.

***************************************************** }

 

unit UIntToStroka;

 

interface

 

uses SysUtils;

 

const

N1: array[0..9] ofstring = ('ноль',

'один',

'два',

'три',

'четыре',

'пять',

'шесть',

'семь',

'восемь',

'девять');

 

const

N1000: array[1..9] ofstring = ('одна',

'две',

'три',

'четыре',

'пять',

'шесть',

'семь',

'восемь',

'девять');

 

const

N11: array[0..9] ofstring = ('десять',

'одиннадцать',

'двенадцать',

'тринадцать',

'четырнадцать',

'пятнадцать',

'шестнадцать',

'семнадцать',

'восемнадцать',

'девятнадцать');

 

const

N2: array[1..9] ofstring = ('десять',

'двадцать',

'тридцать',

'сорок',

'пятьдесят',

'шестьдесят',

'семьдесят',

'восемьдесят',

'девяносто'

);

 

const

N3: array[1..9] ofstring = ('сто',

'двести',

'триста',

'четыреста',

'пятьсот',

'шестьсот',

'семьсот',

'восемьсот',

'девятьсот'

);

 

const

NThousand: array[1..3] ofstring = ('тысяча ',

'тысячи ',

'тысяч ');

 

const

NMillion: array[1..3] ofstring = ('миллион ',

'миллиона ',

'миллионов ');

 

function IntToStroka(n: Integer): AnsiString;

 

implementation

 

function IntToStroka(n: Integer): AnsiString;

var

i, j, dec, j0: Integer;

s: string;

degt, degm: boolean;

buf: string;

begin

degt := false;

degm := false;

s := IntToStr(n);

Result := '';

for i := length(s) downto1do

begin

dec := (length(s) - i + 1); // получим разряд

j := StrToInt(s[i]); // получим цифру

 

if j = 0then

j0 := 0;

if (not (j in [1..9])) and (dec <> 1) then

Continue;

 

if Dec in [1, 4, 7, 10] then

try

if StrToInt(s[i - 1]) = 1then

begin

j0 := j;

Continue;

end; // подготовка к 10..19 тысяч/миллионов

except

end;

 

if Dec in [2, 5, 8, 11] then

if j = 1then

begin

case dec of

2: Result := N11[j0] + ' '; // если 10..19 тысяч/миллионов

5:

begin

Result := N11[j0] + ' ' + NThousand[3] + Result;

degt := true;

end;

8:

begin

Result := N11[j0] + ' ' + NMillion[3] + Result;

degm := true;

end;

end;

Continue;

end;

 

if DEC in [4..6] then

begin

if (j <> 0) and (not degt) then

begin

if dec = 4then

case j of

1: buf := NThousand[1];

2..4: buf := NThousand[2];

// прибавим слово тысяча если ещё не добавляли

5..9: buf := NThousand[3];

end

else

buf := NThousand[3];

degt := true;

end;

end;

 

if DEC in [7..9] then

begin

if (j <> 0) and (not degm) then

begin

if dec = 7then

case j of

1: buf := NMillion[1];

2..4: buf := NMillion[2];

// прибавим слово миллион если ещё не добавляли

5..9: buf := NMillion[3];

end

else

buf := NMillion[3];

degm := true;

end;

end;

 

Result := buf + Result;

 

while dec > 3do

dec := dec - 3;

 

case Dec of

1: if j <> 0then

if degt and (not degm) then

Result := N1000[j] + ' ' + Result

else

Result := N1[j] + ' ' + Result; // 3 три

2: Result := N2[j] + ' ' + Result; // 23 двадцать три

3: Result := N3[j] + ' ' + Result; // 123 сто двадцать три

end;

Buf := '';

j0 := j;

end;

end;

 

end.

 

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить