Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.25;
Скачать: CL | DM;

Вниз

Перевод из числа в стоки! Помогите???   Найти похожие ветки 

 
Face   (2005-07-09 07:21) [0]

Здравствуйте!!!
Посоветуйте как можно число перевести в строковое значение???
например: "1256" надо заменить на "Тысяча двести пятьдесят шесть"
подскажите плизззз!!!


 
alex-drob   (2005-07-09 07:24) [1]

Компонент ByWords.


 
Face   (2005-07-09 07:35) [2]

О!!! А по подробнее???


 
alex-drob   (2005-07-09 07:37) [3]

Где нашёл не помню, но могу прислать на мыло.


 
Face   (2005-07-09 07:37) [4]

угу, буду признателен!!!


 
Kerk ©   (2005-07-09 08:30) [5]

http://delphibase.spb.ru


 
Igor_thief   (2005-07-09 11:37) [6]

Когда-то писал свою реализацию этого дела. Ничего сложного. Вот тебе один из прикольных вариантов найденых потом в инете.
unit Curr2StrRU;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Math;

type
 TMoneyType=(mtUAH,mtRUS,mtUSD,mtEUR);
 TLanguageType=(ltUA,ltRU); // требования банка (по-украински; по-русски)
 TCurr2StrRU = class(TComponent)
 private
   { Private declarations }
   FSumma          : currency;
   FActive         : boolean;
   FMoneyType      : TMoneyType;
   FValue          : string;
   FFullString     : boolean;

   procedure FSetSumma(Summa: currency);
   procedure FSetActive(Active: boolean);
   procedure FSetMoneyType(MoneyType: TMoneyType);
   procedure FSetValue(Value: string);
   procedure FSetFullString(FullString: boolean);

 protected
   { Protected declarations }
 public
   { Public declarations }
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
 published
  property Active       : boolean read FActive write FSetActive;
  property MoneyType    : TMoneyType read FMoneyType write FSetMoneyType;
  property FullString   : boolean read FFullString write FSetFullString;
  property Summa        : Currency read FSumma write FSetSumma;
  property Value        : string read FValue write FSetValue;
 end;

procedure Register;

implementation
//----------------------------------------------------------------------------
procedure TCurr2StrRU.FSetSumma(Summa: currency);
begin
 If Summa >= 0 then begin
   if not FActive then FSumma := Summa
                  else raise Exception.Create("ФИГНЯ! Значение Summa нельзя менять пока Active=True.")

 end else  raise Exception.Create("ФИГНЯ! Значение Summa должно быть в диапазоне от - –922337203685477.58 до
922337203685477.58");
end;
//----------------------------------------------------------------------------
procedure TCurr2StrRU.FSetMoneyType(MoneyType: TMoneyType);
begin
 if FMoneyType <> MoneyType then begin
   if not FActive then  FMoneyType := MoneyType
                  else raise Exception.Create("ФИГНЯ! Значение MoneyType нельзя менять пока Active=True.")
 end;

end;
//----------------------------------------------------------------------------
procedure TCurr2StrRU.FSetFullString(FullString: boolean);
begin
 if FFullString <> FullString then begin
   if not FActive then  FFullString := FullString
                  else raise Exception.Create("ФИГНЯ! Значение FullString нельзя менять пока Active=True.")
 end;

end;
//----------------------------------------------------------------------------
procedure TCurr2StrRU.FSetValue(Value: string);
begin
  if (FValue<>Value) then FValue:=Value;
end;
//----------------------------------------------------------------------------
procedure TCurr2StrRU.FSetActive(Active: boolean);
const Max000 = 6;           {Кол-во триплетов - 000}
     MaxPosition=Max000*3; {Кол-во знаков в числе }

function IIF(i:Boolean; s1,s2 : Char) : Char; overload;
begin
 if i then result:=s1 else result:=s2
end;

function IIF(i:Boolean; s1,s2 : String ) : String; overload;
begin
 if i then result:=s1 else result := s2
end;

function NumToStr(s:String):String;{Возвращает число прописью}
const
 c1000  : array[0..Max000] of string = ("", "тысяч", "миллион", "миллиард", "триллион", "квадраллион", "квинтиллион");
 c1000m : array[0..Max000] of Boolean = (False, True, False, False, False, False, False);
 c1000w : array[0..Max000] of Boolean = (True, True, False, False, False, False, False);
 w : array[False..True,"0".."9"] of String[3] = (("ов "," ","а ","а ","а ","ов ","ов ","ов ","ов ","ов "), (" " ,"а ","и ",
"и ","и "," "," "," "," "," "));

function Num000toStr(S:String;woman:Boolean):String;  //Num000toStr возвращает число для триплета
const
 c100   : array["0".."9"] of string=("","сто "   ,"двести "  ,"триста "  ,"четыреста ","пятьсот ","шестьсот ","семьсот "  ,
"восемьсот "  ,"девятьсот ");
 c10    : array["0".."9"] of string=("","десять ","двадцать ","тридцать ","сорок ","пятьдесят ","шестьдесят ","семьдесят ",
"восемьдесят ","девяносто ");
 c11    : array["0".."9"] of string=("","один","две","три","четыр","пят","шест","сем","восем","девят");
 c1     : array[False..True,"0".."9"]of String=(("","один ","два ","три ","четыре ","пять ","шесть ","семь ","восемь ",
"девять "), ("","одна ","две ","три ","четыре ","пять ","шесть ","семь ","восемь ","девять "));
begin {--------------------------------Num000toStr--------------------------------}
 Result:=c100[s[1]]+iif((s[2]="1") and (s[3]>"0"), c11[s[3]]+"надцать ",c10[s[2]] + c1[woman,s[3]]);
end;  {--------------------------------Num000toStr--------------------------------}

var s000 : String[3];
   isw, isMinus : Boolean;
   i : integer;  //Счётчик триплетов
Begin {--------------------------------NumToStr-----------------------------------}
 Result := ""; i:=0;
 isMinus := (s<>"") and (s[1]="-");
 if isMinus then s := Copy(s, 2, Length(s) - 1);
 while not((i>= Ceil(Length(s)/3)) or (i >= Max000)) do
   begin
     s000:=Copy("00" + s,Length(s)-i*3, 3);
     case MoneyType of
       mtRUS : isw:=c1000m[i]; // рубль - ОН
       mtUSD : isw:=c1000m[i]; // доллар - ОН
       mtEUR : isw:=c1000m[i]; // евро - ОН
       mtUAH : isw:=c1000w[i]; // гривна - ОНА
     end;
     if (i>0) and (s000<>"000") then  // тысячи и т.д.
       Result := c1000[i] + w[isw, iif(s000[2]="1", "0", s000[3])] + Result;
     Result := Num000toStr(s000, isw) + Result;
     Inc(i)
   end;
 if Result = "" then Result := "ноль";
 if isMinus then Result := "минус " + Result;
End;  {--------------------------------NumToStr-----------------------------------}

function RealToRouble(c : Currency):String;
const
 // корень - рубл,  копе
 RUS_root   : array["0".."3"] of string[5] = (" рубл"," копе", " руб.", " коп.");
 RUS_ruble  : array["0".."9"] of string[2] = ("ей","ь","я","я","я","ей","ей","ей","ей","ей");


 
Igor_thief   (2005-07-09 11:37) [7]

 RUS_kopeek : array["0".."9"] of string[3] = ("ек","йка","йки","йки","йки","ек","ек","ек","ек","ек");
 // корень - грив,  копе
 UAH_root   : array["0".."3"] of string[5] = (" грив"," копе"," грн."," коп.");
 UAH_ruble  : array["0".."9"] of string[2] = ("ен","на","ны","ны","ны","ен","ен","ен","ен","ен");
 UAH_kopeek : array["0".."9"] of string[3] = ("ек","йка","йки","йки","йки","ек","ек","ек","ек","ек");
 // корень - доллар,  цент
 USD_root   : array["0".."3"] of string[7] = (" доллар"," цент"," USD"," цент.");
 USD_ruble  : array["0".."9"]of string[2] = ("ов","","а","а","а","ов","ов","ов","ов","ов");
 USD_kopeek : array["0".."9"]of string[3] = ("ов","","а","а","а","ов","ов","ов","ов","ов");
 // корень - евро,  цент
 EUR_root   : array["0".."3"] of string[6] = (" евро"," цент"," EUR"," цент.");
 EUR_ruble  : array["0".."9"]of string[2] = ("","","","","","","","","","");
 EUR_kopeek : array["0".."9"]of string[3] = ("ов","","а","а","а","ов","ов","ов","ов","ов");

function ending(const s:String):Char;
var l : integer;  // С l на 8 байт коротче $50->$48->$3F
begin  // Возвращает индекс окончания
 l := Length(s);
 Result:=iif((l>1) and (s[l-1]="1"), "0", s[l]);
end;

var rub : String[MaxPosition + 3];
   kop : String[2];
begin  {Возвращает число прописью с рублями и копейками}
 Str(c : MaxPosition+3:2, Result);
 if Pos("E",Result)=0 then  // Если число можно представить в строке <>1E+99
   begin
     rub := TrimLeft(Copy(Result, 1, Length(Result) - 3));
     kop := Copy(Result, Length(Result)-1, 2) ;
     case MoneyType of
       mtRUS : if FullString = true then Result := NumToStr(rub) + RUS_root["0"] + RUS_ruble[ending(rub)] + " " + kop +
RUS_root["1"] + RUS_Kopeek[ending(kop)]
               else Result := NumToStr(rub) + RUS_root["2"] + " " + kop + RUS_root["3"];
       mtUAH : if FullString = true then Result := NumToStr(rub) + UAH_root["0"] + UAH_ruble[ending(rub)] + " " + kop +
UAH_root["1"] + UAH_kopeek[ending(kop)]
               else Result := NumToStr(rub) + UAH_root["2"] + " " + kop + UAH_root["3"];
       mtUSD : if FullString = true then Result := NumToStr(rub) + USD_root["0"] + USD_ruble[ending(rub)] + " " + kop +
USD_root["1"] + USD_kopeek[ending(kop)]
               else Result := NumToStr(rub) + USD_root["2"] + " " + kop + USD_root["3"];
       mtEUR : if FullString = true then Result := NumToStr(rub) + EUR_root["0"] + EUR_ruble[ending(rub)] + " " + kop +
EUR_root["1"] + EUR_kopeek[ending(kop)]
               else Result := NumToStr(rub) + EUR_root["2"] + " " + kop + EUR_root["3"];
     end;
     Result := AnsiUpperCase(Result[1]) + Copy(Result, 2, Length(Result) - 1);
   end;
end;

begin
 if FActive<>Active then begin
   FActive:=Active;
   if FActive then FValue := RealToRouble(FSumma)
   else FValue:="";
 end;
end;
//----------------------------------------------------------------------------
procedure Register;
begin
 RegisterComponents("ASKO_DS", [TCurr2StrRU]);
end;
//----------------------------------------------------------------------------
constructor TCurr2StrRU.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 FSumma := 0;
end;
//----------------------------------------------------------------------------
destructor TCurr2StrRU.Destroy;
begin
 inherited Destroy;
end;
//----------------------------------------------------------------------------

end.


 
SergP ©   (2005-07-09 11:46) [8]

На delphiworld.narod.ru есть около десятка вариантов



Страницы: 1 вся ветка

Текущий архив: 2005.07.25;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.041 c
1-1120751838
VasRog
2005-07-07 19:57
2005.07.25
Указатель на динамический массив


1-1120817381
serguncho
2005-07-08 14:09
2005.07.25
Упаковка вложенных папок Zlib


1-1120587813
SpyBoy
2005-07-05 22:23
2005.07.25
как программно нажать клавишу?


10-1097502395
Roobee
2004-10-11 17:46
2005.07.25
Интеграция Delphi и Excel. Мастера откликнитесь.


1-1120647706
irq
2005-07-06 15:01
2005.07.25
Запуск программы после запуска определенного сервиса