求一个将数字转换成人民币大写形式的函数!! 求一个将数字转换成人民币大写形式的函数!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://expert.csdn.net/Expert/topic/1617/1617382.xml?temp=.5198175 我也是从csdn中down的{**** 金额转中文大写 ****}function MoneyToUpper(const NumBer:Double):String;var StrNumber,AUpperNum,AMoneyUnit:String; UpperNum:array[0..9] of String; MoneyUnit:array[1..16]of String; VI:Integer; VAZero,VAZnum:Boolean; VN:Double;begin UpperNum[1] := '壹' ; UpperNum[2] := '贰' ; UpperNum[3] := '叁' ; UpperNum[4] := '肆' ; UpperNum[5] := '伍' ; UpperNum[6] := '陆' ; UpperNum[7] := '柒' ; UpperNum[8] := '捌' ; UpperNum[9] := '玖' ; MoneyUnit[1] := '万' ; MoneyUnit[2] := '仟' ; MoneyUnit[3] := '佰' ; MoneyUnit[4] := '拾' ; MoneyUnit[5] := '亿' ; MoneyUnit[6] := '仟' ; MoneyUnit[7] := '佰' ; MoneyUnit[8] := '拾' ; MoneyUnit[9] := '万' ; MoneyUnit[10] := '仟' ; MoneyUnit[11] := '佰' ; MoneyUnit[12] := '拾' ; MoneyUnit[13] := '元' ; MoneyUnit[14] := '.' ; MoneyUnit[15] := '角' ; MoneyUnit[16] := '分' ; VAZero := False ; AUpperNum := '' ; AMoneyUnit := '' ; result := ''; if NumBer < 0 then begin result := '负' ; VN := - NumBer ; end else VN := NumBer ; Str(VN:16:2,StrNumber); for VI := 1 to 16 do begin if StrNumber[VI] <> ' ' then begin AMoneyUnit := MoneyUnit[VI]; if StrNumber[VI] = '0' then begin if VAZero and (copy(result,Length(result)-1,2)='零') then result := copy(result,1,Length(result)-2); case VI of 1..4,6..8,10..12:begin // 万,仟,佰,拾 AUpperNum := '零' ; AMoneyUnit := '' ; end; 5,9,13: begin // 亿,万,元 if StrToFloat(StrNumber) < 1 then AMoneyUnit := '' ; AUpperNum := '' ; end; 15: begin // 角 if StrToFloat(StrNumber) < 1 then AUpperNum := '' else AUpperNum := '零' ; AMoneyUnit := '' ; end; 16: begin // 分 AUpperNum := '' ; AMoneyUnit := '' ; end; end; VAZero := True ; end else begin if StrNumber[VI] = '.' then begin AUpperNum := ''; AMoneyUnit := ''; end else begin VAZero := False ; AUpperNum := UpperNum[StrToInt(StrNumber[VI])]; end end; result := result + (AUpperNum + AMoneyUnit); end; end; for vi:=1 to length(result) do if (copy(result,vi,2)='角') or (copy(result,vi,2)='分') then vaznum:=true; if vaznum=true then result:=result else begin if result='' then result :='零元整' else result := result + '整' ; end;end; function TOBig(small: real): string;var SmallMonth, BigMonth: string; wei1, qianwei1: string[2]; qianwei, dianweizhi, qian: integer;begin{------- 修改参数令值更精确 -------} qianwei := -2; {小数点后的位置,需要的话也可以改动-2值} Smallmonth := formatfloat('0.00', small); {转换成货币形式,需要的话小数点后加多几个零}{---------------------------------} dianweizhi := pos('.', Smallmonth); {小数点的位置} for qian := length(Smallmonth) downto 1 do {循环小写货币的每一位,从小写的右边位置到左边} begin if qian <> dianweizhi then {如果读到的不是小数点就继续} begin case strtoint(copy(Smallmonth, qian, 1)) of {位置上的数转换成大写} 1: wei1 := '壹'; 2: wei1 := '贰'; 3: wei1 := '叁'; 4: wei1 := '肆'; 5: wei1 := '伍'; 6: wei1 := '陆'; 7: wei1 := '柒'; 8: wei1 := '捌'; 9: wei1 := '玖'; 0: wei1 := '零'; end; case qianwei of {判断大写位置,可以继续增大到real类型的最大值} - 3: qianwei1 := '厘'; - 2: qianwei1 := '分'; - 1: qianwei1 := '角'; 0: qianwei1 := '元'; 1: qianwei1 := '拾'; 2: qianwei1 := '佰'; 3: qianwei1 := '千'; 4: qianwei1 := '万'; 5: qianwei1 := '拾'; 6: qianwei1 := '佰'; 7: qianwei1 := '千'; 8: qianwei1 := '亿'; 9: qianwei1 := '十'; 10: qianwei1 := '佰'; 11: qianwei1 := '千'; end; inc(qianwei); BigMonth := wei1 + qianwei1 + BigMonth; {组合成大写金额} end; end; result := BigMonth;end; 请高手看一段建树代码 fastreport高手请进,急 怎樣加密存儲過程. 有谁知道如何在DELPHI中利用代码恢复和备份ORACLE数据库???先谢过了!!! 一个关于查询的简单的问题 关于中创软件 得到系统临时文件夹的全路径! 谁要是能将此小程序补全了,高分啊!(千山一刀求教C语言的) 菜鸟想速成,求教个问题 DELPHI是个烂货!!! 十万火急!!!如何在IntraWeb做的ISAPI里调用Rave? 好书推荐
{**** 金额转中文大写 ****}
function MoneyToUpper(const NumBer:Double):String;
var StrNumber,AUpperNum,AMoneyUnit:String;
UpperNum:array[0..9] of String;
MoneyUnit:array[1..16]of String;
VI:Integer;
VAZero,VAZnum:Boolean;
VN:Double;
begin
UpperNum[1] := '壹' ;
UpperNum[2] := '贰' ;
UpperNum[3] := '叁' ;
UpperNum[4] := '肆' ;
UpperNum[5] := '伍' ;
UpperNum[6] := '陆' ;
UpperNum[7] := '柒' ;
UpperNum[8] := '捌' ;
UpperNum[9] := '玖' ; MoneyUnit[1] := '万' ;
MoneyUnit[2] := '仟' ;
MoneyUnit[3] := '佰' ;
MoneyUnit[4] := '拾' ;
MoneyUnit[5] := '亿' ;
MoneyUnit[6] := '仟' ;
MoneyUnit[7] := '佰' ;
MoneyUnit[8] := '拾' ;
MoneyUnit[9] := '万' ;
MoneyUnit[10] := '仟' ;
MoneyUnit[11] := '佰' ;
MoneyUnit[12] := '拾' ;
MoneyUnit[13] := '元' ;
MoneyUnit[14] := '.' ;
MoneyUnit[15] := '角' ;
MoneyUnit[16] := '分' ; VAZero := False ;
AUpperNum := '' ;
AMoneyUnit := '' ;
result := '';
if NumBer < 0 then
begin
result := '负' ;
VN := - NumBer ;
end
else
VN := NumBer ;
Str(VN:16:2,StrNumber); for VI := 1 to 16 do
begin
if StrNumber[VI] <> ' ' then
begin
AMoneyUnit := MoneyUnit[VI];
if StrNumber[VI] = '0' then
begin
if VAZero and (copy(result,Length(result)-1,2)='零') then
result := copy(result,1,Length(result)-2);
case VI of
1..4,6..8,10..12:begin // 万,仟,佰,拾
AUpperNum := '零' ;
AMoneyUnit := '' ;
end;
5,9,13: begin // 亿,万,元
if StrToFloat(StrNumber) < 1 then AMoneyUnit := '' ;
AUpperNum := '' ;
end;
15: begin // 角
if StrToFloat(StrNumber) < 1 then AUpperNum := ''
else AUpperNum := '零' ;
AMoneyUnit := '' ;
end;
16: begin // 分
AUpperNum := '' ;
AMoneyUnit := '' ;
end;
end;
VAZero := True ;
end
else
begin
if StrNumber[VI] = '.' then
begin
AUpperNum := '';
AMoneyUnit := '';
end
else
begin
VAZero := False ;
AUpperNum := UpperNum[StrToInt(StrNumber[VI])];
end
end;
result := result + (AUpperNum + AMoneyUnit);
end;
end;
for vi:=1 to length(result) do
if (copy(result,vi,2)='角') or (copy(result,vi,2)='分') then
vaznum:=true;
if vaznum=true then
result:=result
else
begin
if result='' then
result :='零元整'
else
result := result + '整' ;
end;
end;
var
SmallMonth, BigMonth: string;
wei1, qianwei1: string[2];
qianwei, dianweizhi, qian: integer;
begin
{------- 修改参数令值更精确 -------}
qianwei := -2; {小数点后的位置,需要的话也可以改动-2值}
Smallmonth := formatfloat('0.00', small); {转换成货币形式,需要的话小数点后加多几个零}
{---------------------------------}
dianweizhi := pos('.', Smallmonth); {小数点的位置}
for qian := length(Smallmonth) downto 1 do {循环小写货币的每一位,从小写的右边位置到左边}
begin
if qian <> dianweizhi then {如果读到的不是小数点就继续}
begin
case strtoint(copy(Smallmonth, qian, 1)) of {位置上的数转换成大写}
1: wei1 := '壹'; 2: wei1 := '贰';
3: wei1 := '叁'; 4: wei1 := '肆';
5: wei1 := '伍'; 6: wei1 := '陆';
7: wei1 := '柒'; 8: wei1 := '捌';
9: wei1 := '玖'; 0: wei1 := '零';
end;
case qianwei of {判断大写位置,可以继续增大到real类型的最大值}
- 3: qianwei1 := '厘';
- 2: qianwei1 := '分';
- 1: qianwei1 := '角';
0: qianwei1 := '元';
1: qianwei1 := '拾';
2: qianwei1 := '佰';
3: qianwei1 := '千';
4: qianwei1 := '万';
5: qianwei1 := '拾';
6: qianwei1 := '佰';
7: qianwei1 := '千';
8: qianwei1 := '亿';
9: qianwei1 := '十';
10: qianwei1 := '佰';
11: qianwei1 := '千';
end;
inc(qianwei);
BigMonth := wei1 + qianwei1 + BigMonth; {组合成大写金额}
end;
end;
result := BigMonth;
end;