function covMoneyTORMB(money: Real): String;
const
numList:array[0..9] of String=('零','壹','贰','叁','肆','伍','陆','柒','捌','玖');
rmbList:array[0..14] of string= ('分','角','元','拾','佰','仟','万','拾','佰','仟','亿','拾','佰','仟','万');
var
n,numLen,numChar:integer;
numstr,rmb,n1,n2,hz:string;
begin
Result:='';
If money > 9999999999999.99 Then
begin
result:='超出范围的人民币值';
Exit;
end;
money:=RoundEx(money);
numstr:= FloatToStr(money * 100);
numLen:= Length(numstr);
n:=1;
While n <= numLen do
begin
numChar:= StrtoInt(middle_str(numstr, n, 1));
n1:= numList[numChar];
n2:= rmbList[numLen - n];
If Not (n1='零') Then
hz:= hz + n1 + n2
Else
begin
If (n2 ='亿') Or (n2 = '万') Or (n2 = '元') Or (n1 = '零') Then
While right_str(hz, 2) ='零' do
begin
hz:=left_str(hz,Length(hz)-2);
end;
If ((n2 = '亿') Or ((n2 = '万') And (right_str(hz, 2) <> '亿')) Or (n2 = '元')) Then
hz:= hz + n2
Else
If (left_str(right_str(hz, 4), 2)='零') Or (right_str(hz, 2) <> '亿') Then
hz:= hz + n1;
end;
n:= n + 1;
end;
While (right_str(hz, 2)= '零') Do
hz:= left_str(hz, Length(hz) - 2);
If (right_str(hz, 2) = '元') Then
hz:= hz + '整';
If (right_str(hz, 2) = '角') Then
hz:= hz + '整';
Result:= hz;
end;
const
numList:array[0..9] of String=('零','壹','贰','叁','肆','伍','陆','柒','捌','玖');
rmbList:array[0..14] of string= ('分','角','元','拾','佰','仟','万','拾','佰','仟','亿','拾','佰','仟','万');
var
n,numLen,numChar:integer;
numstr,rmb,n1,n2,hz:string;
begin
Result:='';
If money > 9999999999999.99 Then
begin
result:='超出范围的人民币值';
Exit;
end;
money:=RoundEx(money);
numstr:= FloatToStr(money * 100);
numLen:= Length(numstr);
n:=1;
While n <= numLen do
begin
numChar:= StrtoInt(middle_str(numstr, n, 1));
n1:= numList[numChar];
n2:= rmbList[numLen - n];
If Not (n1='零') Then
hz:= hz + n1 + n2
Else
begin
If (n2 ='亿') Or (n2 = '万') Or (n2 = '元') Or (n1 = '零') Then
While right_str(hz, 2) ='零' do
begin
hz:=left_str(hz,Length(hz)-2);
end;
If ((n2 = '亿') Or ((n2 = '万') And (right_str(hz, 2) <> '亿')) Or (n2 = '元')) Then
hz:= hz + n2
Else
If (left_str(right_str(hz, 4), 2)='零') Or (right_str(hz, 2) <> '亿') Then
hz:= hz + n1;
end;
n:= n + 1;
end;
While (right_str(hz, 2)= '零') Do
hz:= left_str(hz, Length(hz) - 2);
If (right_str(hz, 2) = '元') Then
hz:= hz + '整';
If (right_str(hz, 2) = '角') Then
hz:= hz + '整';
Result:= hz;
end;
解决方案 »
- 控制stringgrid单元格的背景颜色
- delphi 判断网络问题
- delphi 能实现实时监控文件吗
- 数据库内存表问题。。。
- 菜鸟提问,请高手解答,谢谢!
- 请问如何在 Win2000下列出当前运行的所有程序的完整路径,而不仅仅是文件名?
- 解决就给分!小弟急,急着要交差,交不了就死定了!大家来看看!关于FastReport的几个问题,估计兄弟们均有可能遇到?email:[email protected]
- 高手来帮我看一下这段自制组件的代码错误在哪里???小弟不明白!
- 如何侦测鼠标离开控件的事件,如TLabel的OnMouseLeave我想写一个类似金山取词窗的东西,当鼠标离开控件的时候隐藏控件
- 如何让程序自动填写表单?分不够再加
- 如何在DBGRID(EH)中关联PopupMenu...
- 请大侠指点:关于编辑框中光标的坐标的获取:比如说光标在memo中,而鼠标在memo之外,如何用api函数获取光标的坐标
const
mnUnit:string='分角元';
hzUnit:string='拾佰仟万拾佰仟亿拾佰仟万拾佰仟';
hzNum:string='零壹贰叁肆伍陆柒捌玖';
var
szChMoney,szNum:string;
iLen, iNum, iAddZero,i:integer;
begin
iAddZero:=0;
szNum:=FormatFloat('0', Num*100.0); //这样可能会有数字误差,double只有15位有效数字,这里只有13
Result:='';
iLen:=Length(szNum);
if Pos('E',UpperCase(szNum))>0 then exit;
if (iLen>18) or (iLen=0) or (Num<0) then exit; //数据错误返回 for i:=1 to iLen do
begin
iNum:=StrToInt(copy(szNum,i,1));
if iNum=0 then
begin
if (((iLen-i-2) mod 4)=0) and ((iLen-i-3)>0) and (((iLen-i)>=8) or (iAddZero<3)) then
szChMoney:=copy(szChMoney+hzUnit,((iLen-i-3) mod 8)*2+1,2);
inc(iAddZero);
end
else
begin
if ((iAddZero>0) and ((iLen-i)>=2)) and (((iLen-i-1) mod 4)<>0) then
szChMoney:=szChMoney+copy(hzNum,1,2);
szChMoney:=szChMoney+copy(hzNum,iNum*2+1,2);
iAddZero:=0;
end;
if (iAddZero<1) or ((iLen-i)=2) then
if (iLen-i)>=3 then
begin
szChMoney:=szChMoney+copy(hzUnit,((iLen-i-3) mod 8)*2+1,2);
end
else
szChMoney:=szChMoney+copy(mnUnit,((iLen-i) mod 3)*2+1,2);
end;
if Trim(szChMoney)='' then
szChMoney:='零元整'
else
if copy(szNum,Length(szNum),1)='0' then szChMoney:=szChMoney+'整';
Result:=szChMoney;
end;