Форум: "Основная";
Текущий архив: 2002.11.14;
Скачать: [xml.tar.bz2];
Внизперевод числа в строку Найти похожие ветки
← →
ALI2002 (2002-11-05 14:21) [0]Где найти компоненту перевод числа в сумму прописью ?
← →
myor (2002-11-05 14:22) [1]компонент?
а inttostr() не подойдет?
← →
Внук (2002-11-05 14:23) [2]http://delphibase.endimus.com/
← →
SaS13 (2002-11-05 14:31) [3]когда-то здесь отрыл, не помню чья именно:
const
SumArr: array [0..8, 0..9] of string =
(
( "","один ","два ","три ","четыре ","пять ","шесть ","семь ","восемь ","девять " ),
( "","","двадцать ","тридцать ","сорок ","пятьдесят ","шестьдесят ","семьдесят ","восемьдесят ","девяносто " ),
( "","сто ","двести ","триста ","четыреста ","пятьсот ","шестьсот ","семьсот ","восемьсот ","девятьсот " ),
( "тысяч ","тысяча ","две тысячи ","три тысячи ","четыре тысячи ","пять тысячь ","шесть тысячь ","семь тысячь ","восемь тысячь ","девять тысячь " ),
( "","","двадцать ","тридцать ","сорок ","пятьдесят ","шестьдесят ","семьдесят ","восемьдесят ","девяносто " ),
( "","сто ","двести ","триста ","четыреста ","пятьсот ","шестьсот ","семьсот ","восемьсот ","девятьсот " ),
( "миллионов ","один миллион ","два миллиона ","три миллиона ","четыре миллиона ","пять миллионов ","шесть миллионов ","семь миллионов ","восемь миллионов ","девять миллионов " ),
( "","","двадцать ","тридцать ","сорок ","пятьдесят ","шестьдесят ","семьдесят ","восемьдесят ","девяносто " ),
( "","сто ","двести ","триста ","четыреста ","пятьсот ","шестьсот ","семьсот ","восемьсот ","девятьсот " )
);
SumArr2: array [0..9] of string =
( "десять ","одинадцать ","двенадцать ","тринадцать ","четырнадцать ","пятьнадцать ","шестьнадцать ","семьнадцать ","восемьнадцать ","девятьнадцать " );
{Преобразование суммы в текст, т.е. на входе ("1234.45", "USD") возвращает
строку "Одна тысяча двести тридцать четыре, 45 USD"}
function SumToString( const Value, KodVal: string): string;
var
hi, lo: string;
procedure Get2Str( const _val: string; var _hi, _lo: string );
var
p: integer;
begin
p := pos( ",", _val );
_lo := "0";
_hi := "0";
if p = 0 then
p := pos( ".", _val );
if (p = 0) or (p > Length( _val )) then begin
_hi := _val;
_lo := "0"
end
else if p = 1 then begin
_hi := "0";
_lo := _val
end
else begin
_hi := copy( _val, 1, p - 1 );
_lo := copy( _val, p + 1, Length( _val ) )
end
end;
function Part1SumToStr( const _val: string ): string;
var
s, t : string;
p, pp, i: integer;
begin
s := _val;
if StrToInt( s ) = 0 then
t := "Ноль "
else begin
p := Length( s );
pp := p;
if p > 1 then
if (s[p - 1] = "1") and (s[p] > "0") then begin
t := SumArr2[StrToIntDef( s[p], 0 )];
pp := pp - 2
end;
i := pp;
while i > 0 do begin
if (i = p - 3) and (p > 4) then
if s[p - 4] = "1" then begin
t := SumArr2[StrToIntDef( s[p - 3], 0 )] + "тысяч " + t;
i := i - 2
end;
if (i = p - 6) and (p > 7) then
if s[p - 7] = "1" then begin
t := SumArr2[StrToIntDef( s[p - 6], 0 )] + "миллионов " + t;
i := i - 2
end;
if i > 0 then begin
t := SumArr[p - i, StrToIntDef( s[i], 0 )] + t;
i := i - 1
end
end
end;
Result := t
end;
function Part2SumToStr( const _val: string ): string;
var
_pnt : word;
begin
_pnt := 2;// PointByValut( KodVal ); - у меня по коду валюты бралось кол-во знаков после запятой :))
Result := _val;
while Length( Result ) < _pnt do
Result := Result + "0"
end;
begin
Result := Value + " " + KodVal;
try
Get2Str( Value, hi, lo );
if StrToIntDef( hi, -1 ) <> -1 then
hi := Part1SumToStr( hi )
else
hi := EmptyStr;
if StrToIntDef( lo, 0 ) <> 0 then
lo := ", " + Part2SumToStr( lo ) + " "
else
lo := " ";
Result := hi + lo + KodVal;
Result[1] := AnsiUpperCase( Result[1] )[1]
except
end
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.11.14;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c