PDA

View Full Version : conver 172$ -> one hundreds seventy-two. bác nào biết giải dùm e.



mousedie
03-04-2008, 11:24
Em đang rất cần thuật toán này mà chưa có hướng giải quyết. Nếu sử dụng if, else thi nhiều trường hợp lắm.
Cho e lời giải đáp nhé. Thanks các bác nhièu

extjs
03-04-2008, 12:35
Tách số !
Có phải phần tử thứ 1 ko có tiền tố ko
Phần tử thứ 2 sẽ có tiền tố "Chục"
Phần tử thứ 3 sẽ có tiền tố "Trăm"
Phần tử thứ 4 sẽ có tiền tố "Ngàn"...

mousedie
03-04-2008, 22:48
Cảm ơn bác đã giúp đỡ. Ý e muốn là sử dụng tiếng anh. Vì mấy cái báo cáo hóa đơn sử dụng nó.

it4de
03-04-2008, 23:06
Tách số !
Có phải phần tử thứ 1 ko có tiền tố ko
Phần tử thứ 2 sẽ có tiền tố "Chục"
Phần tử thứ 3 sẽ có tiền tố "Trăm"
Phần tử thứ 4 sẽ có tiền tố "Ngàn"...
Hậu tố chứ bác....

@mousedie: thì ý của bác extjs là như vậy, còn tiếng Anh, tiếng Việt, Pháp Đức gì thì cứ thế mà thay vào....

Godbloc
18-04-2008, 18:45
/CODE
function String_ConvertDecimal (Const Source : string ) : string ;
var
Subs : Astring ;
i : integer ;

Function UnitsOf (Source : char ) : string ;
begin
Case Source of
'0' : result := ' Kh«ng';
'1' : result := ' mét';
'2' : result := ' Hai';
'3' : result := ' Ba';
'4' : result := ' Bèn';
'5' : result := ' n¨m';
'6' : result := ' S¸u';
'7' : result := ' b¶y' ;
'8' : result := ' T¸m' ;
'9' : result := ' ChÝn' ;
End ;
// result := result + ext;
end;
Function TensOf (Source : char ) : string ;
begin
Case Source of
'0' : result := ' Linh';
'1' : result := ' m­êi';
'2' : result := ' Hai m­¬i';
'3' : result := ' Ba m­¬i';
'4' : result := ' Bèn m­¬i';
'5' : result := ' n¨m m­¬i';
'6' : result := ' S¸u m­¬i';
'7' : result := ' b¶y m­¬i' ;
'8' : result := ' T¸m m­¬i' ;
'9' : result := ' ChÝn m­¬i' ;
End ;
end;

Function HundredsOf (Source : char ) : string ;
begin
result := UnitsOf (Source) + ' Tr¨m' ;
end;

Function Level ( Num : integer ) : String ;
begin
Result := '';
Case num Of
1 : result := ' Ngh×n';
2 : result := ' triÖu';
3 : result := ' Tû';
end;
end;

Function HundredsOfLevel (Source : String ; Num : integer ) : string ;
begin
result := '';
If Source ='000' then
begin
// Result := Level(Num);
exit;
End;
Case length (Source) of
3 :
begin
Result := result + Hundredsof(Source[1])
+ TensOf (Source[2]) ;
If Source[3]<>'0' then
result := Result
+UnitsOf (Source[3]) ;
End;


2 :
begin
If Source[2] <> '0' then
result := TensOF (Source[1])+ UnitsOf (Source[2])
Else
result := TensOF (Source[1]);
end;
1 :
Begin
result := UnitsOf (Source[1]);
End;
end;
// Writeln(Level(Num)); readln;
Result := Result + Level(Num);

end;


begin
//1,023,306,643
result :='';
String_Extract (Source , ',',Subs) ;
For i :=0 to High (Subs) do
begin
// Writeln(Subs[i]);Readln;
result := result + HundredsOfLevel (Subs[i],High(Subs)-i);
end;
end;
CODE/
Chuc vui !

[=========> Bổ sung bài viết <=========]

Thêm cái này cho đủ . viết = tiếng việt nên có thể hiển thị khó xem .
Hàm này dùng để tách chuỗi .
/Code
Function String_Extract (Soure : string ; Filters : string ;var return : Astring ; Mode : integer ): integer;
var
i , l, n, j : integer;
s,s1 :string;
c : char;
//.................................................. .......
function filtercheck (c: char ) : char ;
var i: integer;
begin
result :=#0;
for i:=1 to length (filters) do
if c = filters[i] then begin
result := c;
break;
End;
End;
//.................................................. .......
begin
s := soure ;
l := length (soure );
i:=1;
j := i;
n := High (return );
while i <= length(s) do
begin
c := filtercheck (s[i] );
if c<>#0 then
begin
s1 := copy(s, j ,i-j ) ;
String_clipspace(s1);
if (s1 <>'') then
begin
Setlength (return ,n+2 );
n := High (return );
return [n] := s1 ;
End;
j := i+1 ;
End;
inc(i) ;
End;
s1 := copy(s, j ,i-j ) ;
if s1<>'' then
begin
Setlength (return ,n+2 );
n := High (return );
String_ClipSpace(S1);
return [n] := s1 ;
End;
Result := Length (Return);

End;
/Code