数字转换(100分)

  • 主题发起人 主题发起人 小天
  • 开始时间 开始时间

小天

Unregistered / Unconfirmed
GUEST, unregistred user!
中文数字/英文数字(包括年月日星期等)如何转换成数字呢?
 
什么 中文数字/英文数字?
 
不太明白你的意思。
你可不可举个例子来看看呀?
:)
 
one hundred and one -> 101
 
k:=0;w:=0
循环...
for j:=1 to length(文字) do begin
查 0-9 的中、英文,如if (s='ONE') or (s='一') then k=1
查 千百文字 乘相应数字 如 if s='百' then k:=k*100
w := w + k;
end 循环
//查找某个文字不再说明
 
给你个函数:
function ConvertNumber(Value:Extended): string;
var
ps: string;
ns: string;
ns1, ns2, ns3: string;
i: integer;
iValue: LongInt;
PValue : Integer;
da: array [0 .. 12] of string;
na: array [0 .. 10] of string;
ps0: boolean;
begin
da[0] := '';
da[1] := '拾';
da[2] := '佰';
da[3] := '仟';
na[0] := '零';
na[1] := '壹';
na[2] := '贰';
na[3] := '叁';
na[4] := '肆';
na[5] := '伍';
na[6] := '陆';
na[7] := '柒';
na[8] := '捌';
na[9] := '玖';
ps := '';
ns := '';
ns1 := '';
ns2 := '';
ns3 := '';
if Value <> Trunc(Value) then
begin
pValue := Trunc((Value - Trunc(Value))*100+0.5);
ps := na[pValue div 10] + '角';
if (pValue mod 10) <> 0 then
ps := ps+na[pValue mod 10] + '分';
end;
i := 0;
iValue := Trunc(Value);
if IValue = 0 then
ns := '零元'
else
begin
ps0 := False;
repeat
if (IValue mod 10 <> 0) then
begin
ns1 := na[Ivalue mod 10] + da + ns1;
ps0 := True;
end
else if ps0 then
begin
ns1 := '零'+ns1;
ps0 := False;
end;
iValue := IValue Div 10;
inc(i);
until (iValue = 0) or (i > 3);
ns := ns1;
if iValue <> 0 then
begin
ps0 := False;
i := 0;
repeat
if (IValue mod 10 <> 0) then
begin
ns2 := na[Ivalue mod 10] + da + ns2;
ps0 := True;
end
else if ps0 then
begin
ns2 := '零'+ns2;
ps0 := False;
end;
iValue := IValue Div 10;
inc(i);
until (iValue = 0) or (i > 3);
if ns2 <> '' then
ns := ns2 + '万' + ns;
end;
if iValue <> 0 then
begin
ps0 := False;
i := 0;
repeat
if (IValue mod 10 <> 0) then
begin
ns3 := na[Ivalue mod 10] + da + ns3;
ps0 := True;
end
else if ps0 then
begin
ns2 := '零'+ns3;
ps0 := False;
end;
iValue := IValue Div 10;
inc(i);
until (iValue = 0) or (i > 3);
end;
if ns3 <> '' then
ns := ns3 + '亿'+ ns;
ns := ns + '元';
end;
Result := ns + ps + '整';
end;

function GetDigit(Value: string): string;
var
i: integer;
begin
Result := '';
for i := 1 to Length(Value) do
if Value in ['0'..'9', '.'] then
Result := Result + Value;
end;
 
不是要转换成大写,是要求大写转换成数字
 
建立一个数组,即简单,速度又快,只是代码稍微长了点,楼上的那位兄弟已经给了。
 
我不需要金额转换
 
小天大哥:
>>我不需要金额转换
从这句话就能看出,你不是不会,就是太懒惰!呵呵,别打我啊![:D][:D]
 
没必要吧?老外也是看01-01-2000的。
不是看英文的吧?阿拉伯数字是通用的。
 
to 小笨苯
是啊是啊,被你看出来了,5555555555555555
老实说,就是英文翻译的可能性太多太多,一一列举太烦了,所以才来发分问问的,嘻嘻
 
function getnumber(Sourcestring:string):string;
const StrArray: array[0..9]of string=('零','壹','贰','叁','肆','伍','陆','柒','捌','玖');
Var i,number,len:integer;
resultstring:string;
begin
// 先保证sourcestring是完全的大写数字,不含其它字符
// 再在后面加上“拾”“佰”“仟”或“年”“月”等的处理就可以了
len:=length(sourcestring);
i:=1;
while i<len do
begin
// AnsiIndexStr 返回字符串AText在字符串数组AValues中的位置 (StrUtils.pas)
number:=AnsiIndexStr(midstr(Sourcestring,i,2),StrArray);
if number>-1 then
resultstring:=resultstring+inttostr(number);

i:=i+2;
end;
result:=resultstring;
end;
 
晕,还有和我一样懒的人呀,呵呵
 
中文大写转阿拉伯数字很容易,英文还没想过呢
 
wo kao
****
b c
 
后退
顶部