Number to Letter
Fer Castro
Ciudad de M?©xico
Hello
I have a report and I need to print the number as well as the number into letter, ie:
$ 250.00 (TWO HUNDRED AND FIFTY DOLLARS 00/100 USCy)
Actually I have a function which converts numbers into letter, but I have no idea about how insert the function into the report,
Thanks and best regards
- Delphi XE
- Fast Report 4.13.1
- Devart UNIDAC
I have a report and I need to print the number as well as the number into letter, ie:
$ 250.00 (TWO HUNDRED AND FIFTY DOLLARS 00/100 USCy)
Actually I have a function which converts numbers into letter, but I have no idea about how insert the function into the report,
Thanks and best regards
- Delphi XE
- Fast Report 4.13.1
- Devart UNIDAC
Comments
Gordk,
I really appreciate your help and your answer, but to tell you the truth I was expecting something like a sample. You can be sure I have read the manual 4 or 5 times in order to acomplish the task.
But guess what, if I request help in the forum i'ts because my knowledge has limits. But again, I really appreciate your advice [img]style_emoticons/<#EMO_DIR#>/smile.gif" style="vertical-align:middle" emoid=":)" border="0" alt="smile.gif" /> Regards!![/img]
Instead of making a Delphi-side user function, you can simply put your function in the code of the report, before 'begin'.
The function then can be used inside the report both in code and in MemoView's. In a MemoView you can put something like '[NumberToLetter(<MyQry."MyIntegerField">)]'.
The main advantage of making a Delphi-side user function is that the function then can be used in all your reports.
There is also another way to share code between reports: You can put your shared code in an external .pas-file, and connect this to your report by adding the filename to the uses clause in the beginning of your report's code. I think the .pas file by default (or always??) should be located where you have your .exe's.
Here is an example of both internal function and attached .pas file.
Petter
use: [FloatToEng('your_number_field')]
//
English ----
function getNumEng(const Value:longint):string;
begin
case Value of
0:result:='ZERO';
1:result:='ONE';
2:result:='TWO';
3:result:='THREE';
4:result:='FOUR';
5:result:='FIVE';
6:result:='SIX';
7:result:='SEVEN';
8:result:='EIGHT';
9:result:='NINE';
10:result:='TEN';
11:result:='ELEVEN';
12:result:='TWELVE';
13:result:='THIRTEEN';
14:result:='FOURTEEN';
15:result:='FIFTEEN';
16:result:='SIXTEEN';
17:result:='SEVENTEEN';
18:result:='EIGHTEEN';
19:result:='NINETEEN';
20:result:='TWENTY';
30:result:='THIRTY';
40:result:='FORTY';
50:result:='FIFTY';
60:result:='SIXTY';
70:result:='SEVENTY';
80:result:='EIGHTY';
90:result:='NINETY';
100:result:='HUNDRED';
1000:result:='THOUSAND';
1000000:result:='MILLION';
end;
end;
function GetEng(const Value:longint):string;
var Digit:integer;
begin
result:='';
if Value=0 then exit;
Digit:= Value div 1000000;
if (Digit>0) then begin
result:=GetEng(Digit)+' ' + GetNumEng(1000000);
if (Value Mod 1000000) > 0 then
result:=result+' '+GetEng(Value Mod 1000000);
end
else begin
Digit:=Value Div 1000;
if Digit>0 then begin
result:=GetEng(Digit)+ ' ' + GetNumEng(1000);
if (Value mod 1000)>0 then begin
result:=result+' '+GetEng(Value Mod 1000);
end;
end
else begin
Digit:=Value Div 100;
if Digit>0 then begin
result:=GetEng(Digit) + ' ' + GetNumEng(100);
if (Value mod 100)>0 then
result:=result+GetEng(Value Mod 100);
end
else begin
if Value > 20 then begin
Digit:=Value Div 10;
result:=GetNumEng(Digit*10);
if (Value Mod (Digit*10))>0 then
result:=result+GetNumEng(Value Mod (Digit*10));
end
else
result:=getNumEng(Value);
end;
end;
end;
end;
function FloatToEng(const value:extended) : String;
var x:string;
Svalue,First,Second:string;
V,M:longint;
begin
result:='';
if Value=0 then exit;
SValue:=trim(floattostr(value));
if pos('.',Svalue)>0 then begin
First:=copy(SValue,1,pos('.',Svalue)-1);
if First='' then First:='0';
Second:=copy(SValue,pos('.',Svalue)+1,length(Svalue));
end
else begin
First:=SValue;
Second:='';
end;
result:='';
V:=strtoint(First);
if Value=0 then x:=GetNumEng(V) else
if V>100 then begin
M:=(V Mod 100);
x:=GetEng(V-M);
if M>0 then x:=x+' AND '+GetEng(M);
end
else x:=GetEng(V);
result := x ;
end;