delphi人民币大小写转换

合集下载

大小写金额转换

大小写金额转换

*大小写金额转换DA TA: L_DXSTR(60). "大写金额DA TA: HJ_JFJE LIKE BSEG-WRBTR. "小写金额HJ_JFJE = '234687.88'.PERFORM XX_CHANGE_DX USING HJ_JFJE CHANGING L_DXSTR.*FORM XX_CHANGE_DX using valchanging dxstr.DA TA: ZS(15).DA TA: XS(15).DA TA: STR(15).DA TA: LEN TYPE I V ALUE 0.DA TA: CIS TYPE I V ALUE 0.DA TA: SS(2).DA TA: RR(1).DA TA: STRR(15).DA TA: change(30) TYPE C V ALUE '1壹2贰3叁4肆5伍6陆7柒8捌9玖0零'.CLEAR DXSTR.MOVE V AL TO STR.SHIFT STR LEFT DELETING LEADING SPACE.SPLIT STR A T '.' INTO ZS XS.LEN = STRLEN( ZS ).CLEAR STRR.CIS = LEN - 1.DO LEN TIMES.MOVE ZS+CIS(1) TO RR.CONCA TENA TE STRR RR INTO STRR.CIS = CIS - 1.ENDDO.CIS = 0.DO LEN TIMES.MOVE STRR+CIS(1) TO SS.TRANSLA TE SS USING change.CASE CIS.WHEN 0. CONCA TENA TE SS '元' INTO DXSTR.WHEN 1. CONCA TENA TE SS '拾' DXSTR INTO DXSTR.WHEN 2. CONCA TENA TE SS '佰' DXSTR INTO DXSTR.WHEN 3. CONCA TENA TE SS '仟' DXSTR INTO DXSTR.WHEN 4. CONCA TENA TE SS '万' DXSTR INTO DXSTR.WHEN 5. CONCA TENA TE SS '拾' DXSTR INTO DXSTR.WHEN 6. CONCA TENA TE SS '佰' DXSTR INTO DXSTR.WHEN 7. CONCA TENA TE SS '仟' DXSTR INTO DXSTR.WHEN 8. CONCA TENA TE SS '亿' DXSTR INTO DXSTR.WHEN 9. CONCA TENA TE SS '拾' DXSTR INTO DXSTR.WHEN 10. CONCA TENA TE SS '百' DXSTR INTO DXSTR.WHEN 11. CONCA TENA TE SS '仟' DXSTR INTO DXSTR.ENDCASE.CIS = CIS + 1.ENDDO.CLEAR SS.IF XS <> '00'.MOVE XS+0(1) TO SS. TRANSLA TE SS USING change.CONCA TENA TE DXSTR SS '角' INTO DXSTR.MOVE XS+1(1) TO SS. TRANSLA TE SS USING change.CONCA TENA TE DXSTR SS '分' INTO DXSTR.ENDIF.CONCA TENA TE DXSTR '整' INTO DXSTR.ENDFORM. " XX_CHANGE_DX我的程序写的比较粗糙,转换方法比较笨。

人民币大小写转换Excel公式

人民币大小写转换Excel公式

人民币大小写转换Excel公式以下假设你在A1单元格中输入金额数字,在其它单元格输入以下公式就可以了公式1=SUBSTITUTE(SUBSTITUTE(IF(A1<0,"负","")&TEXT(TRUNC(ABS(ROUND(A1,2))),"[DBNum2]")&"元"&IF(ISERR(FIND(".",ROUND(A1,2))),"",TEXT(RIGHT(TRUNC(ROUND(A1,2)*10)),"[DBN um2]"))&IF(ISERR(FIND(".0",TEXT(A1,"0.00"))),"角","")&IF(LEFT(RIGHT(ROUND(A1,2),3))=".",TEXT(RIGHT(ROUND(A1,2)),"[DBNum2]")&"分",IF(ROUND(A1,2)=0,"","整")),"零元零",""),"零元","")公式2=IF((A1-INT(A1))=0,TEXT(A1,"[DBNUM2]")&"元整",IF(INT(A1*10)-A1*10=0,TEXT(INT(A1),"[DBNUM2]")&"元"&TEXT((INT(A1*10)-INT(A1)*10),"[DBNUM2]")&"角整",TEXT(INT(A1),"[DBNUM2]")&"元"&IF(INT(A1*10)-INT(A1)*10=0,"零",TEXT(INT(A1*10)-INT(A1)*10,"[DBNUM2]")&"角")&TEXT(RIGHT(A1,1),"[DBNUM2]")&"分"))公式3=IF(ABS(A1)<0.005,"",IF(A1<0,"负",)&IF(INT(ABS(A1)),TEXT(INT(ABS(A1)),"[dbnum2]")&"元",)&IF(INT(ABS(A1)*10)-INT(ABS(A1))*10,TEXT(INT(ABS(A1)*10)-INT(ABS(A1))*10,"[db num2]")&"角",IF(INT(ABS(A1))=ABS(A1),,IF(ABS(A1)<0.1,,"零")))&IF(ROUND(ABS(A1)*100-INT(ABS(A1)*10)*10,),TEXT(ROUND(ABS(A1)*100-INT(A BS(A1)*10)*10,),"[dbnum2]")&"分","整"))以上公式包含在附件的excel表格中。

[转]Delphi12种大小写转换的方法

[转]Delphi12种大小写转换的方法

[转]Delphi12种⼤⼩写转换的⽅法----------第⼀种⽅法----------function TPrintfrm.NumToChar(n: Real): wideString; //可以到万亿,并可随便扩⼤constcNum: WideString = '零壹贰叁肆伍陆柒捌玖-万仟佰拾亿仟佰拾万仟佰拾元⾓分';cCha: array[0..1, 0..11] of string =(('零仟','零佰','零拾','零零零','零零','零亿','零万','零元','亿万','零⾓','零分','零整'),( '零','零','零','零','零','亿','万','元','亿','零','整','整'));vari: Integer;sNum :WideString;beginResult := '';//n := Round(n*10)/10;//FormatFloat('0.0',)sNum := FormatFloat('0',n*100);for i := 1 to Length(sNum) doResult := Result + cNum[ord(sNum[i])-47] + cNum[26-Length(sNum)+i];for i:= 0 to 11 do // 去掉多余的零Result := StringReplace(result, cCha[0,i], cCha[1,i], [rfReplaceAll]);end;----------第⼆种⽅法----------function TSnnofrm.LowToUpcase(xx: Real): string;vari: Integer;j,dxhj: string;zero: boolean;beginj := FormatFloat('0.0',xx);j := Trim(IntToStr(Round(xx*100)));if pos('.',j) <> 0 thenj := Copy(j,1,pos('.',j)-1);if j = '' thenj:='0';if copy(j,length(j),1) = '0' thenbegindxhj := '整';zero := True;endelsebegindxhj := '';zero := False;end;for i := 0 to Length(j)-1 dobeginif StrToInt(Copy(j,Length(j)-i,1)) <> 0 thencase i of0: dxhj := '分'+dxhj;1: dxhj := '⾓'+dxhj;2: dxhj := '元'+dxhj;3: dxhj := '拾'+dxhj;4: dxhj := '佰'+dxhj;5: dxhj := '仟'+dxhj;6: dxhj := '万'+dxhj;7: dxhj := '拾'+dxhj;8: dxhj := '佰'+dxhj;9: dxhj := '仟'+dxhj;10: dxhj := '亿'+dxhj;11: dxhj := '拾'+dxhj;end;case StrToInt(Copy(j,Length(j)-i,1)) of 0:beginif not zero thendxhj := '零'+dxhj;zero := True;end;1:begindxhj := '壹'+dxhj;zero := False;end;2:begindxhj := '贰'+dxhj;zero := False;end;3:begindxhj := '叁'+dxhj;zero := False;end;4:begindxhj := '肆'+dxhj;zero := False;end;5:begindxhj := '五'+dxhj;zero := False;end;6:begindxhj := '六'+dxhj;zero := False;end;7:begindxhj := '七'+dxhj;zero := False;end;8:begindxhj := '⼋'+dxhj;zero := False;end;9:begindxhj := '玖'+dxhj;zero := False;end;end;end;if dxhj = '整' thendxhj := '';Result := dxhj;end;----------第三种⽅法----------//数字转中⽂function NumberCn(mNumber: Real): WideString;constcPointCn: WideString = '点⼗百千万⼗百千亿⼗百千';cNumberCn: WideString = '零⼀⼆三四五六七⼋九';varI, L, P: Integer;S: string;beginResult := '';if mNumber = 0 thenbeginResult := cNumberCn[1];Exit;end;S := FloatToStr(mNumber);if Pos('.', S) <= 0 then S := S + '.';P := Pos('.', S);L := Length(S);for I := 1 to L doif P > I thenResult := Result + cNumberCn[StrToInt(S[I]) + 1] + cPointCn[P - I] else if P = I then beginResult := StringReplace(Result, '零⼗零', '零', [rfReplaceAll]);Result := StringReplace(Result, '零百零', '零', [rfReplaceAll]);Result := StringReplace(Result, '零千零', '零', [rfReplaceAll]);Result := StringReplace(Result, '零⼗', '零', [rfReplaceAll]);Result := StringReplace(Result, '零百', '零', [rfReplaceAll]);Result := StringReplace(Result, '零千', '零', [rfReplaceAll]);Result := StringReplace(Result, '零万', '万', [rfReplaceAll]);Result := StringReplace(Result, '零亿', '亿', [rfReplaceAll]);Result := StringReplace(Result, '亿万', '亿', [rfReplaceAll]);Result := StringReplace(Result, '零点', '点', [rfReplaceAll]);end else if P < I thenResult := Result + cNumberCn[StrToInt(S[I]) + 1];if Result[Length(Result)] = cPointCn[1] thenResult := Copy(Result, 1, Length(Result) - 1);if Result[1] = cPointCn[1] then Result := cNumberCn[1] + Result; if (Length(Result) > 1) and (Result[2] = cPointCn[2]) and(Result[1] = cNumberCn[2]) thenDelete(Result, 1, 1);end; { NumberCn }//⾦额转中⽂⼤写function MoneyCn(mMoney: Real): WideString;varP: Integer;beginif mMoney = 0 then beginResult := '⽆';Exit;end;Result := NumberCn(Round(mMoney * 100) / 100);Result := StringReplace(Result, '⼀', '壹', [rfReplaceAll]);Result := StringReplace(Result, '⼆', '贰', [rfReplaceAll]);Result := StringReplace(Result, '三', '叁', [rfReplaceAll]);Result := StringReplace(Result, '四', '肆', [rfReplaceAll]);Result := StringReplace(Result, '五', '伍', [rfReplaceAll]);Result := StringReplace(Result, '六', '陆', [rfReplaceAll]);Result := StringReplace(Result, '七', '柒', [rfReplaceAll]);Result := StringReplace(Result, '⼋', '捌', [rfReplaceAll]);Result := StringReplace(Result, '九', '玖', [rfReplaceAll]);Result := StringReplace(Result, '九', '玖', [rfReplaceAll]); Result := StringReplace(Result, '⼗', '拾', [rfReplaceAll]); Result := StringReplace(Result, '百', '佰', [rfReplaceAll]); Result := StringReplace(Result, '千', '仟', [rfReplaceAll]); P := Pos('点', Result);if P > 0 then beginInsert('分', Result, P + 3);Insert('⾓', Result, P + 2);Result := StringReplace(Result, '点', '圆', [rfReplaceAll]); Result := StringReplace(Result, '⾓分', '⾓', [rfReplaceAll]); Result := StringReplace(Result, '零分', '', [rfReplaceAll]); Result := StringReplace(Result, '零⾓', '', [rfReplaceAll]); Result := StringReplace(Result, '分⾓', '', [rfReplaceAll]); if Copy(Result, 1, 2) = '零圆' thenResult := StringReplace(Result, '零圆', '', [rfReplaceAll]); end else Result := Result + '圆整';Result := '⼈民币' + Result;end;----------第四种⽅法----------给你个函数吧function Tjfdy.SmallTOBig(small:real):string;varSmallMonth,BigMonth:string;wei1,qianwei1:string[2];qianwei,dianweizhi,qian:integer;begin{------- 修改参数令值更精确 -------}{⼩数点后的位数,需要的话也可以改动该值}qianwei:=-2;{转换成货币形式,需要的话⼩数点后加多⼏个零}Smallmonth:=formatfloat('0.00',small);{---------------------------------}dianweizhi :=pos('.',Smallmonth);{⼩数点的位置}{循环⼩写货币的每⼀位,从⼩写的右边位置到左边}for qian:=length(Smallmonth) downto 1 dobegin{如果读到的不是⼩数点就继续}if qian<>dianweizhi thenbegin{位置上的数转换成⼤写}case strtoint(copy(Smallmonth,qian,1)) of1:wei1:='壹'; 2:wei1:='贰';3:wei1:='叁'; 4:wei1:='肆';5:wei1:='伍'; 6:wei1:='陆';7:wei1:='柒'; 8:wei1:='捌';9:wei1:='玖'; 0:wei1:='零';end;{判断⼤写位置,可以继续增⼤到real类型的最⼤值,可是谁有那么多钱} case qianwei of-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;SmallTOBig:=BigMonth;end;----------第五种⽅法---------Function TFormFhdCw.XxToDx(const hjnum:real):String;var Vstr,zzz,cc,cc1,Presult:string;xxbb:array[1..12]of string;uppna:array[0..9] of string;iCount,iZero,vPoint,vdtlno:integer;begin//*设置⼤写中⽂数字和相应单位数组*// xxbb[1]:='亿';xxbb[2]:='仟';xxbb[3]:='佰';xxbb[4]:='拾';xxbb[5]:='万';xxbb[6]:='仟';xxbb[7]:='佰';xxbb[8]:='拾';xxbb[9]:='元';xxbb[10]:='.';xxbb[11]:='⾓';xxbb[12]:='分';uppna[0]:='零';uppna[1]:='壹';uppna[2]:='贰';uppna[3]:='叁';uppna[4]:='肆';uppna[5]:='伍';uppna[6]:='陆';uppna[7]:='柒';uppna[8]:='捌';uppna[9]:='玖';Str(hjnum:12:2,Vstr);cc:='';cc1:='';zzz:='';result:='';presult:='';iZero:=0;vPoint:=0;for iCount:=1 to 10 dobegincc:=Vstr[iCount];if cc<>' ' thenbeginzzz:=xxbb[iCount];if cc='0' thenbeginif iZero<1 then //*对“零”进⾏判断*//cc:='零'elsecc:='';if iCount=5 then //*对万位“零”的处理*//if copy(result,length(result)-1,2)='零' thenresult:=copy(result,1,length(result)-2)+xxbb[iCount] +'零'elseresult:=result+xxbb[iCount];cc1:=cc;zzz:='';iZero:=iZero+1;endelsebeginif cc='.' thenbegincc:='';if (cc1='') or (cc1='零') thenbeginPresult:=copy(result,1,Length(result)-2);result:=Presult;iZero:=15;end;if iZero>=1 thenzzz:=xxbb[9]elsezzz:='';vPoint:=1;endelsebeginiZero:=0;cc:=uppna[StrToInt(cc)];endend;result:=result+(cc+zzz)end;end;If Vstr[11]='0' then //*对⼩数点后两位进⾏处理*// beginif Vstr[12]<>'0' thenbegincc:='零';result:=result+cc;cc:=uppna[StrToInt(Vstr[12])];result:=result+(uppna[0]+cc+xxbb[12]);endendelsebeginif iZero=15 thenbegincc:='零';result:=result+cc;end;cc:=uppna[StrToInt(Vstr[11])];result:=result+(cc+xxbb[11]);if Vstr[12]<>'0' thenbegincc:=uppna[StrToInt(Vstr[12])];result:=result+(cc+xxbb[12]);end;end;result:=result+'正';end;----------第六种⽅法----------给你⼀段很短的代码吧,好⽤,我⽤过的function TForm1.xTOd(i:Real):string;constd='零壹贰叁肆伍陆柒捌玖分⾓元拾佰仟万拾佰仟亿'; varm,k:string;j:integer;begink:='';m:=floattostr(int(i*100));for j:=length(m) downto 1 dok:=k+d[(strtoint(m[Length(m)-j+1])+1)*2-1]+d[(strtoint(m[Length(m)-j+1])+1)*2]+d[(10+j)*2-1]+d[(10+j)*2]; xTOd:=k;end;调⽤:procedure TForm1.Button1Click(Sender: TObject);varSum:real;beginsum:=12.34;showmessage('⼈民币⼤写:'+xTOd(Sum));end;----------第七种⽅法----------function SmallTOBig(small:real):string;var SmallMonth,BigMonth:string;wei1,qianwei1:string[2];wei,qianwei,dianweizhi,qian:integer;begin{------- 修改参数令值更精确 -------}{⼩数点后的位置,需要的话也可以改动-2值}qianwei:=-2;{转换成货币形式,需要的话⼩数点后加多⼏个零}Smallmonth:=formatfloat('0.00',small);{---------------------------------}dianweizhi :=pos('.',Smallmonth);{⼩数点的位置}{循环⼩写货币的每⼀位,从⼩写的右边位置到左边}for qian:=length(Smallmonth) downto 1 dobegin{如果读到的不是⼩数点就继续}if qian<>dianweizhi thenbegin{位置上的数转换成⼤写}case strtoint(copy(Smallmonth,qian,1)) of1:wei1:='壹'; 2:wei1:='贰';3:wei1:='叁'; 4:wei1:='肆';5:wei1:='伍'; 6:wei1:='陆';7:wei1:='柒'; 8:wei1:='捌';9:wei1:='玖'; 0:wei1:='零';end;{判断⼤写位置,可以继续增⼤到real类型的最⼤值}case qianwei of-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;SmallTOBig:=BigMonth;end;----------第⼋种是⼩写转⼤写----------⽤Delphi编写⼈民币⼤⼩写转换程序本⽂是⼤写==>>⼩写要⼩写==>>⼤写请跟我联系!在财务管理系统中,有时需要打印⼤写⼈民币数字,于是笔者编写了以下⼀些函数使这⼀需要得以满⾜,现介绍如下:注:copy(2005-Jey-QQ:344430663)本程序在Delphi7、Winwin2000下调试通过。

在EXCL中怎样把小写数字转换成中文大写

在EXCL中怎样把小写数字转换成中文大写

在EXCL中怎样把小写数字转换成中文大写?=IF(A1<0,"负","")&IF(ABS(A1)>1,TEXT(TRUNC(ABS(ROUND(A1,2))),"[DBNum2]")&"元","")&IF(ISERR(FIND(".",ROUND(A1,2))),"",TEXT(RIGHT(TRUNC(ROUND(A1, 2)*10)),"[DBNum2]"))&IF(ISERR(FIND(".0",TEXT(A1,"0.00"))),"角","")&IF(LEFT(RIGHT(ROUND(A1,2),3))=".",TEXT(RIGHT(ROUND(A1,2)),"[DB Num2]")&"分","整")="人民币"&IF(ABS(A1)<0.005,"",IF(A1<0,"负",)&IF(INT(ABS(A1)),TEXT(INT(ABS(A1)),"[dbnum2]")&"元",)&IF(INT(ABS(A1)*10)-INT(ABS(A1))*10,TEXT(INT(ABS(A1)*10)-INT(ABS( A1))*10,"[dbnum2]")&"角",IF(INT(ABS(A1))=ABS(A1),,IF(ABS(A1)<0.1,,"零")))&IF(ROUND(ABS(A1)*100-INT(ABS(A1)*10)*10,),TEXT(ROUND(ABS(A1)* 100-INT(ABS(A1)*10)*10,),"[dbnum2]")&"分","整"))Excel数字转换为中文大写2009-12-23 09:47在Excel应用过程中,常常有人尤其是会计需要实现货币由小写转大写,经本人归纳应用最多的有二种情况(可能不全哟,见怪),一是在单元格A中输入货币小字,在单元格B中实现小写到大写的自动转换,二是在单元格A中输入货币小写就在单元格A中实现小写到大写自动转换。

delphi大小写转换

delphi大小写转换
end;
end
else //分开
begin
DecPart := IntToUpperCase(DecPart[1]) + ' ' + IntToUpperCase(DecPart[2])
+
' ';
end;
//判断整数位
if IntPart = '0' then IntPart := ''
RMBIntAry[j] := '';
if RMBIntAry[j - 1] <> '万' then RMBIntAry[j - 1] := '';
end;
end;
if RMBIntAry[9] = '零' then RMBIntAry[9] := ''; //万前的零判断
IntPart := '';
begin //分开
IntPart := '';
for i := LenIntPart - 1 downto 0 do
IntPart := IntPart + RMBIntAry[i * 2 + 1] + ' ';
end
else
begin
i := 0;
while IntPart[LenIntPart - i] = '0' do
begin
case StrToInt(Xiao) of
0: Result := '零';

人民币大小写转换算法

人民币大小写转换算法
String u = unit[cArr.length - i - 1];
int position = "元万亿".indexOf(u);
// 遇到零,特殊处理
if (cArr[i] == '0') {
ENDDO
RETVAR = STRTRAN(RETVAR,'零仟','零')
RETVAR = STRTRAN(RETVAR,'零佰','零')
RETVAR = STRTRAN(RETVAR,'零拾','零')
RETVAR = STRTRAN(RETVAR,'零角','零')
"1001"/* 没有小数,且含相邻的两个零 */, "101005.1"/*零在单位所处的位置*/, "1010"/*零在元位*/ };
System.out.println(new BigDecimal(testStrs[2]).toString());
System.out.println(trans(testStrs[2]));
return "";
StringBuffer newS = new StringBuffer();
char[] cArr = str.toCharArray();
for (int i = 0; i < cArr.length; i++) {
RETVAR = STRTRAN(RETVAR,'亿万','亿零')
RETVAR = STRTRAN(RETVAR,'零零','零')

大小写金额转换

大小写金额转换

方式一:设置单元格格式转换金额大小写
步骤一:将小写数字全选复制到需要转换的空白单元格中,鼠标右击选择“设置单元格格式”。

步骤二:分类选择“特殊”,类型选择“人民币大写”,最后点击“确定”。

注意:这种方式不能转换有小数点的金额。

方式二:利用text函数转换金额大小写
方式二可以对有小数点的金额进行转换,首先在空白单元格内点击上方的Fx找到text函数或输入“=text (B5,"[DBNum2][$-804]G/通用格式")”,B5位小写金额的单元格位置,最后点击“确定”即可。

注意:该公式比较复杂,建议收藏复制粘贴使用。

DELPHI中,你的人民币金额大写数字规范吗

DELPHI中,你的人民币金额大写数字规范吗

你的人民币金额大写数字规范吗我们在编程的过程中,特别是开发和财务相关的应用程序的时候,几乎都会遇到要将阿拉伯数字(一般是货币金额)转换为中文大写的要求。

也有一些转换程序,但大都不符合财务实际要求,比如最简单的:function xd(xx:currency):string;var dx,ws:string;i,cd:integer;int:currency;beginint:=trunc((abs(xx)+0.005)*100);{在“厘”上4舍5入后去掉小数点}cd:=length(currtostr(int));{取得数字的长度,跟据此长度即可判断位数}dx:='零壹贰叁肆伍陆柒捌玖';ws:='分角元拾佰仟万拾佰仟亿拾佰仟';{位数}Result:= ' ';i:=1;while i<=cd dobeginResult:=Result+copy(dx,strtoint(copy(currtostr(int),i,1))*2+1,2);{取数字的大写}Result:=Result+copy(ws,(cd-i)*2+1,2);{加上数字的位数}i:=i+1;endend在这里输入xd(1234567.89),返回“壹佰贰拾叁万肆仟伍佰陆拾柒元捌角玖分”,但它并不完美,例如xd(100),返回的却是:壹佰零拾零元零角零分(应是壹佰元整),显然这不符合财务工作的实际要求。

中文大写的特殊性关键在对“0”的处理上,我们编程的思路也是如此,程序中遇到0的时候并不能简单地用大写“零”来代替,要进行如下判断:是否是第一个零(即它的左边是否不为零)?如是第一个零,还要判断,它的后面是否全为零(这要分段判断:亿以上,万以上亿以下,元以上万以下,分以上元以下)?如不是,才能以大写零来代替;如果是就直接写上位数如万(例如:100000,就应是壹拾万,而不是壹拾零万)。

人民币大写转换规则

人民币大写转换规则

人民币大写转换规则人民币大写转换规则是指将阿拉伯数字转换成汉字表达法,以方便人们在经济活动中应用。

本文将为大家详细介绍人民币大写转换的相关规则。

一、基本规则:人民币大写转换规则是按照整数位数从左到右,每四位为一组,每组进行转换,最后在整组的基础上确定十进制制下单位的表达。

二、数位名称:人民币大写转换规则按照汉字习惯,分别以亿、万、元为进位,并规定每个数字只能使用一种不同的数位名称。

具体如下:1、一亿;2、一万;3、元;下面是各个数位的名称:亿万仟百十个1 亿万仟百十个2 亿万仟百十个3 亿万仟百十个4 亿万仟百十个三、数字转换:人民币大写转换规则中,0-9的数字转换如下:0 零1 壹2 贰3 叁4 肆5 伍6 陆7 柒8 捌9 玖四、规则说明:1、数字四舍五入,将小数点后两位取整。

若小数点后有连续的零,则只保留一个零。

2、人民币大写表示法中,“元”是必须写的,但人民币大写的整数位为零时,应该写“零元整”。

3、表示人民币大写的数值不超过亿亿,即1万亿。

4、如十位以前没有数字,则使用“零”来填补。

5、“十、百、千”位上的“零”,在金额大写表示时可以不写。

充分掌握了以上规则,对于人民币大写转换将更加得心应手。

同时,在使用过程中,我们还应注意进一步熟练掌握、运用各个数位的数值、单位和写法。

这将对我们日常生活中的经济活动有很大的帮助,使我们更好地理解人民币的货币单位。

因此,我们应该重视这个规则,并在实践中不断总结经验。

人民币大小写转换(C#)

人民币大小写转换(C#)

⼈民币⼤⼩写转换(C#)今天写了⼀个C#版本的⼤⼩写转换类,想着也要更新⼀下我的⽇记了,便把它传了上来。

哪位路过的⾼⼿,请指点。

这个类提供了⼀个静态⽅法叫做 Convert ( double ),传⼊⼀个9千万亿以内的数值它都能正确的转换为中⽂的⼤写。

基本的思路是将传⼊的数据分为整数部分和⼩数部分分别来处理,⼩数部分的处理⽐较简单,整数部分的处理我作了相应的注释。

1using System;23namespace Tools{4///<summary>5/// DigitalToChinese :实现将⼈民币的数字形式转换为中⽂格式。

6///</summary>7public class DigitalToChinese8 {9public DigitalToChinese(){10 }1112public static string Convert ( double digital ){13if ( digital == 0.00f )14return "零元整";1516string buf = ""; /* 存放返回结果 */17string strDecPart = ""; /* 存放⼩数部分的处理结果 */18string strIntPart = ""; /* 存放整数部分的处理结果 */1920/* 将数据分为整数和⼩数部分 */21char [] cDelim = {'.'};22string [] tmp = null;23string strDigital = digital.ToString ();24if ( strDigital[0] =='.'){ /* 处理数据⾸位为⼩数点的情况 */25 strDigital = "0" + strDigital;26 }27 tmp = strDigital.Split ( cDelim,2);2829/* 整数部分的处理 */30if ( tmp[0].Length > 15 ) {31throw new Exception ("数值超出处理范围。

小写转换大写金额函数

小写转换大写金额函数

小写转换大写金额函数以下是一个将小写数字转换为大写金额的函数,可以用于许多编程语言:```function convertToChinese(num) {var digit = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"];var unit = ["", "拾", "佰", "仟", "万", "亿", "万亿"];var head = num < 0 ? "负" : "";num = Math.abs(num);var s = "";for (var i = 0; i < unit.length && num > 0; i++) {var n = num % 10;s = digit[n] + unit[i] + s;num = Math.floor(num / 10);}s = s.replace(/零(拾|佰|仟)/g, "零").replace(/零+/g, "零").replace(/零(万|亿|万亿)/g, "$1").replace(/亿万/, "亿");return head + s;}```使用方法:```var num = 123.45;var chinese = convertToChinese(num);console.log(chinese); // 输出:壹佰贰拾叁元肆角伍分```上面的函数可以将小写数字转换为大写金额,支持负数和小数,输出格式为“元角分”(可以根据需要修改输出格式)。

delphi阿拉伯数字转换为大写金额

delphi阿拉伯数字转换为大写金额

delphi阿拉伯数字转换为⼤写⾦额function Tform1.Num2CNum(dblArabic: double): string;const_ChineseNumeric = '零壹贰叁肆伍陆柒捌玖';varsArabic: string;sIntArabic: string;iPosOfDecimalPoint: integer;i: integer;iDigit: integer;iSection: integer;sSectionArabic: string;sSection: string;bInZero: boolean;bMinus: boolean;(* 将字串反向, 例如: 传⼊ '1234', 传回 '4321' *)function ConvertStr(const sBeConvert: string): string;varx: integer;beginResult := '';for x := Length(sBeConvert) downto 1 doAppendStr(Result, sBeConvert[x]);end; { of ConvertStr }beginResult := '';bInZero := True;sArabic := FloatToStr(dblArabic); (* 将数字转成阿拉伯数字字串 *){$IFDEF __Debug}ShowMessage('FloatToStr(dblArabic): ' + sArabic);{$ENDIF}if sArabic[1] = '-' thenbeginbMinus := True;sArabic := Copy(sArabic, 2, 254);endelsebMinus := False;iPosOfDecimalPoint := Pos('.', sArabic); (* 取得⼩数点的位置 *){$IFDEF __Debug}ShowMessage('Pos(''.'', sArabic) ' + IntToStr(iPosOfDecimalPoint));{$ENDIF}(* 先处理整数的部分 *)if iPosOfDecimalPoint = 0 thensIntArabic := ConvertStr(sArabic)elsesIntArabic := ConvertStr(Copy(sArabic, 1, iPosOfDecimalPoint - 1));(* 从个位数起以每四位数为⼀⼩节 *)for iSection := 0 to ((Length(sIntArabic) - 1) div 4) dobeginsSectionArabic := Copy(sIntArabic, iSection * 4 + 1, 4);sSection := '';(* 以下的 i 控制: 个⼗百千位四个位数 *)for i := 1 to Length(sSectionArabic) dobeginiDigit := Ord(sSectionArabic[i]) - 48;if iDigit = 0 thenbegin(* 1. 避免 '零' 的重覆出现 *)(* 2. 个位数的 0 不必转成 '零' *)if (not bInZero) and (i <> 1) then sSection := '零' + sSection;bInZero := True;endelsebegincase i of2: sSection := '拾' + sSection;3: sSection := '佰' + sSection;4: sSection := '仟' + sSection;end;sSection := Copy(_ChineseNumeric, 2 * iDigit + 1, 2) +sSection;bInZero := False;end;end;(* 加上该⼩节的位数 *)if Length(sSection) = 0 thenbeginif (Length(Result) > 0) and (Copy(Result, 1, 2) <> '零') thenResult := '零' + Result;endelsebegincase iSection of0: Result := sSection;1: Result := sSection + '万' + Result;2: Result := sSection + '亿' + Result;3: Result := sSection + '兆' + Result;end;end;{$IFDEF __Debug}ShowMessage('sSection: ' + sSection);ShowMessage('Result: ' + Result);{$ENDIF}end;(* 处理⼩数点右边的部分 *)if iPosOfDecimalPoint > 0 thenbeginAppendStr(Result, '点');for i := iPosOfDecimalPoint + 1 to Length(sArabic) dobeginiDigit := Ord(sArabic[i]) - 48;AppendStr(Result, Copy(_ChineseNumeric, 2 * iDigit + 1, 2)); end;end;{$IFDEF __Debug}ShowMessage('Result before 其他例外处理: ' + Result); {$ENDIF}(* 其他例外状况的处理 *)if Length(Result) = 0 then Result := '零';if Copy(Result, 1, 4) = '⼀⼗' then Result := Copy(Result, 3, 254); if Copy(Result, 1, 2) = '点' then Result := '零' + Result;(* 是否为负数 *)if bMinus then Result := '负' + Result;{$IFDEF __Debug}ShowMessage('Result before Exit: ' + Result);{$ENDIF}end;。

DELPHI最精简的小写金额转大写的函数

DELPHI最精简的小写金额转大写的函数

最精简的小写金额转大写的函数function NumToChar(const n: Real): string; //可以到万亿,并且可以随便扩大范围const cNum: WideString = '零壹贰叁肆伍陆柒捌玖--万仟佰拾亿仟佰拾万仟佰拾元角分';cCha:array[0..1, 0..12]of string =(( '零元','零拾','零佰','零仟','零万','零亿','亿万','零零零','零零','零万','零亿','亿万','零元'), ( '元','零','零','零','万','亿','亿','零','零','万','亿','亿','元'));var i : Integer;sNum,sTemp : WideString;beginresult :='';sNum := format('%15d',[round(n * 100)]);for i := 0 to 14 dobeginstemp := copy(snum,i+1,1);if stemp=' ' then continueelse result := result + cNum[strtoint(stemp)+1] + cNum[i+13];end;for i:= 0 to 12 doResult := StringReplace(Result, cCha[0,i], cCha[1,i], [rfReplaceAll]);if pos('零分',result)=0then Result := StringReplace(Result, '零角', '零', [rfReplaceAll])else Result := StringReplace(Result, '零角','整', [rfReplaceAll]);Result := StringReplace(Result, '零分','', [rfReplaceAll]);end;function Changdx2(mmje: Double): String;const s1: String = '零壹贰叁肆伍陆柒捌玖';s2: String = '分角元拾佰仟万拾佰仟亿拾佰仟万';function StrTran(const S, S1, S2: String): String;beginResult := StringReplace(S, S1, S2, [rfReplaceAll]);end;var s, dx: String;i, Len: Integer;beginif mmje < 0 thenbegin dx := '负';mmje := -mmje;end;s := Format('%.0f', [mmje*100]);Len := Length(s);for i := 1 to Len dodx := dx + Copy(s1, (Ord(s[i]) - Ord('0'))*2 + 1, 2) + Copy(s2, (Len - i)*2 + 1, 2);dx := StrTran(StrTran(StrTran(StrTran(StrTran(dx, '零仟', '零'), '零佰', '零'), '零拾', '零'), '零角', '零'), '零分', '整');dx := StrTran(StrTran(StrTran(StrTran(StrTran(dx, '零零', '零'), '零零', '零'), '零亿', '亿'), '零万', '万'), '零元', '元');if dx = '整' then Result := '零元整'else Result := StrTran(StrTran(dx, '亿万', '亿零'), '零整', '整');end;。

人民币小写金额转大写金额(php版)

人民币小写金额转大写金额(php版)

//人民币小写转大写function MoneyToUpper($num,$mode=true) {$char = array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");$dw = array("","拾","佰","仟","","萬","億","兆");$dec = "點";$retval = "";if($mode)preg_match_all('/^0*(\d*)\.?(\d*)$/',$num, $ar);elsepreg_match_all('/(\d*)\.?(\d*)$/',$num, $ar);$ar=array_filter($ar);//过滤空值if(empty($ar)) return '';if($ar[2][0] != "")$retval = $dec . MoneyToUpper($ar[2][0],false); //如果有小数,先递归处理小数if($ar[1][0] != "") {$str = strrev($ar[1][0]);for($i=0;$i<strlen($str);$i++) {$out[$i] = $char[$str[$i]];if($mode) {$out[$i] .= $str[$i] != "0"? $dw[$i%4] : "";isset($str[$i-1])?$next=$str[$i-1]:$next=0;if($str[$i]+$next == 0)$out[$i] = "";if($i%4 == 0)$out[$i] .= $dw[4+floor($i/4)];}}$retval = join("",array_reverse($out)) . $retval;}return $retval;}echo MoneyToUpper("100000.000",false).'<br/>';echo MoneyToUpper("12345006789001.123").'<br/>';echo MoneyToUpper("880079.1234").'<br/>';echo MoneyToUpper("100000.000",true);exit;。

DELPHI实现小写金额转换

DELPHI实现小写金额转换

小写金额转换如下为一个简单的小写金额转换为大写的函数,其思路简单(可以说烂吧,居然利用了位置来转换),但是它几乎可以无限制的转换,只要你能读得出来和写得进去:function Tform1.SmallTOBig(small:real):string;var SmallMonth,BigMonth:string;wei1,qianwei1:string[2];qianwei,dianweizhi,qian:integer;begin{------- 修改参数令值更精确-------}{小数点后的位置,需要的话也可以改动-2值}qianwei:=-2;{转换成货币形式,需要的话小数点后加多几个零}Smallmonth:=formatfloat('0.00',small);{---------------------------------}dianweizhi :=pos('.',Smallmonth);{小数点的位置}{循环小写货币的每一位,从小写的右边位置到左边}for qian:=length(Smallmonth) downto 1 dobegin{如果读到的不是小数点就继续}if qian<>dianweizhi thenbegin{位置上的数转换成大写}case strtoint(copy(Smallmonth,qian,1)) of1:wei1:='壹'; 2:wei1:='贰';3:wei1:='叁'; 4:wei1:='肆';5:wei1:='伍'; 6:wei1:='陆';7:wei1:='柒'; 8:wei1:='捌';9:wei1:='玖'; 0:wei1:='零';end;{判断大写位置,可以继续增大到real类型的最大值}case qianwei of-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;SmallTOBig:=BigMonth;end;调用如下“edit1.text:=SmallTOBig(1234567890.1234);”他自动默认小数点后两位。

小写金额转换为大写金额(C实现)

小写金额转换为大写金额(C实现)

前言银行、单位和个人填写的各种票据和结算凭证是办理支付结算和现金收付的重要依据,直接关系到支付结算的准确、及时和安全。

票据和结算凭证是银行、单位和个人凭以记载帐务的会计凭证,是记载经济业务和明确经济责任的一种书面证明。

因此,填写票据和结算凭证,必须做到标准化、规范化,要要素齐全、数字正确、字迹清晰、不错漏、不潦草,防止涂改。

我的服务需要一个金额转换过程,本来想在网上找,但都是C++、JavaScript、Delphi 的Demo,还没有C的。

索性自己写一个。

参考了其它的转换算法,对我有些启发。

大多的算法都是直接分析字符串生成大写金额,即存在一个假设:源字符串的格式是正确的。

在我的过程中,用状态机的方法分析源字符串,错误时,返回空指针(我可不敢保证传给我的过程的都是##.##)。

分析出源字符串中整数部有多少个数字,是否有小数,统计结果放在一个结构体中,整数和小数部分的数字分别放在两个整形数组里。

有了统计数据就可以生成大写金额了。

转换过程有个难点:要区分万、亿等“段”,特别是个位这个“段”,这个概念是在《小写转大写金额在C++中的实现》文章中提到的。

在下面的程序中用j= ( size - i - 1 ) & 0x3,实际上是j = ( size - i - 1 ) % 4取模,j==0时为段尾,需要特殊处理。

所有的处理都是围绕0来进行的,也就是说,0才是难点。

特殊位置的0,按段分,段中第一个非0数字前的0,可能有多个;段中两个非0数字间的0;段尾的0;个位的0;十分位,角位置的0。

另外,转换的一个重点是大写金额的写法,好像大多的算法都注重转换过程而对这个问题没有深究。

我在文章后面附上转换规则。

下面是代码1./**2.* @brief 将源字符串中的小写金额转换为大写格式3.*4.* @param dest 目的字符串5.* @param src 小写金额字符串6.* @return7.* - NULL 源字符串的格式错误,返回NULL8.* - 非NULL 目的字符串的首位置9.* @note 转换根据:中国人民银行会计司编写的最新《企业、银行正确办理支付结算10.* 指南》的第114页-第115页11.*/12.char* chineseFee( char* dest, char* src )13.{14. enum15. {16.START, //开始17.MINUS, //负号18.ZEROINT, //0整数19.INTEGER, //整数20.DECIMAL, //小数点21.DECIMALfRACTION, //小数位22.END, //结束23.ERROR //错误24. } status = START;25. struct26. {27.int minus; //0为正,1为负28.int sizeInt;29.int sizeDecimal;30.int integer[10];31.int decimal[10];32. } feeInfo;33. char* NumberChar[] =34.{ "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };35. char* UnitChar[] =36.{ "整", "圆", "拾", "佰","仟", "万", "拾", "佰", "仟", "亿",37. "拾", "佰", "仟", "万亿", "拾", "佰", "仟", "亿亿",38. "角", "分", "负", "人民币" };39.40. int i, j,size; //循环变量41. int zeroTag = 0, //0标志42. decZeroTag = 0;43.44. char* pDest = dest;45. char* pSrc = src;46.47. int* pInt = feeInfo.integer;48. int* pDec = feeInfo.decimal;49.50. //初始化51. feeInfo.sizeInt = 0;52. feeInfo.sizeDecimal = 0;53. feeInfo.minus = 0;54.55. //分析字符串56. while( 1 )57. {58.switch ( *pSrc )59.{60.case '-' :61. status = ( status == START ) ? MINUS : ERROR;62. feeInfo.minus = ( status == MINUS ) ? 1 : 0;63. break;64.case '1' :65.case '2' :66.case '3' :67.case '4' :68.case '5' :69.case '6' :70.case '7' :71.case '8' :72.case '9' :73.case '0' :74. if ( *pSrc == '0' && status == ZEROINT )//|| status== START ) )75. {76.status = ERROR;77.break;78. }79. if ( status == MINUS || status == START || status== INTEGER )80. {81.if ( *pSrc == '0' && ( status == MINUS ||status == START ) )82.status = ZEROINT;83.else84.status = INTEGER;85.*pInt = (*pSrc) - 48;86.++pInt;87.++feeInfo.sizeInt;88. }89. else if ( status == DECIMAL || status ==DECIMALfRACTION )90. {91.status = DECIMALfRACTION;92.*pDec = (*pSrc) - 48;93.++pDec;94.++feeInfo.sizeDecimal;95. }96. else97. {98.status =ERROR;99. }100. break;101.case '.' :102. status = ( status == INTEGER || status == ZEROINT )103. ? DECIMAL : ERROR;104. break;105.case '\0' :106. status = ( status == INTEGER || status == DECIMALfRACTION107.|| status == ZEROINT ) ? END : ERROR;108. break;109.default :110. status = ERROR;111.}112.if ( status == END )113.break;114.else if ( status == ERROR )115.return NULL;116.117.++pSrc;118. }119.120. //只有1位小数时,设置百分位为0,使下面代码不需要区分这两种情况121. if ( feeInfo.sizeDecimal == 1 )122. {123.feeInfo.decimal[ 1 ] = 0;124.++feeInfo.sizeDecimal;125. }126. //判断是否需要打印小数部分,有小数部且十分位和百分位不都为0 127. //需要打印小数部时,zeroTag设为0,否则设为1128. if ( feeInfo.sizeDecimal ==0 //没有小数129.|| ( !feeInfo.decimal[ 0 ] && !feeInfo.decimal[ 1 ] ) ) //小数部都为0130.decZeroTag = 1;131. else132.decZeroTag = 0;133.134. //printf( "int size: %d decimal size: %d\n", feeInfo.sizeInt, feeInfo.sizeDecimal );135.136. strcpy( pDest, UnitChar[ 21 ] ); //初始化目标字符串-人民币137.138. if ( feeInfo.minus ) strcat( pDest, UnitChar[ 20 ] ); //负号139.140. //处理整数部分141. size = feeInfo.sizeInt;142. for( i = 0; i < size; ++i )143. {144.j = size - i - 1 &0x3; //j = 0时为段尾145.if ( feeInfo.integer[ i ] == 0 &&j ) //处理非段尾0146.{147.zeroTag = 1;148.}149.else if ( feeInfo.integer[ i ] == 0 && !j ) //处理段尾0150.{151.if ( feeInfo.sizeInt == 1 &&decZeroTag ) //特殊处理个位0152. strcat( pDest,NumberChar[ feeInfo.integer[ i ] ] );153.if ( feeInfo.sizeInt != 1 || decZeroTag )154. strcat( pDest, UnitChar[ size - i ] );155.zeroTag = 0;156.}157.else//处理非0158.{159.if ( zeroTag )160.{161. strcat( pDest, NumberChar[ 0 ] );162. zeroTag = 0;163.}164.strcat( pDest, NumberChar[ feeInfo.integer[ i ] ] ); 165.strcat( pDest, UnitChar[ size - i ] );166.if ( !j ) zeroTag =0; //如果是段尾,设为非标志167.}168. }169.170. if ( decZeroTag )171. {172.strcat( pDest, UnitChar[ 0 ] );//没有小数部,打印"整"字符173. }174. else175. {176.//十分位177.if ( feeInfo.decimal[ 0 ] )178.{179.strcat( pDest, NumberChar[ feeInfo.decimal[ 0 ] ] );180.strcat( pDest, UnitChar[ 18 ] );181.}182.else if ( feeInfo.sizeInt != 1 || feeInfo.integer[ 0 ] ) 183.{184.strcat( pDest, NumberChar[ feeInfo.decimal[ 0 ] ] );185.}186.187.//百分位不为0时188.if ( feeInfo.decimal[ 1 ] )189.{190.strcat( pDest, NumberChar[ feeInfo.decimal[ 1 ] ] );191.strcat( pDest, UnitChar[ 19 ] );192.}193. }194. return dest;195.}复制代码代码中有些地方没有注释清楚,要是有不明白的可以E-Mail我z_jingwei@163aaa。

人民币大写转换函数

人民币大写转换函数

人民币大写转换函数可以将阿拉伯数字表示的人民币金额转换为中文大写形式。

以下是一个示例的Python函数实现:def rmb_upper(amount):units = ['', '拾', '佰', '仟']digits = ['', '万', '亿', '万亿']nums = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']result = ''yuan = str(int(amount)) # 取整数部分jiao = str(int(amount * 10) % 10) # 取小数点后一位fen = str(int(amount * 100) % 10) # 取小数点后两位# 转换整数部分for i in range(len(yuan)):digit = int(yuan[len(yuan) - 1 - i]) # 从个位开始取数if digit != 0:result = nums[digit] + units[i % 4] + resultelse:# 连续多个零只保留一个if result != '' and result[0] != '零':result = nums[digit] + resultelif i == 0:result = nums[digit] + result# 每四位加一个单位(万、亿、万亿)if i % 4 == 3 and result != '':result = digits[i // 4] + resultif result == '':result = '零'# 转换小数部分if jiao != '0':result += nums[int(jiao)] + '角'if fen != '0':result += nums[int(fen)] + '分'result += '整'return result这个函数可以将小于1万亿的人民币金额转换为中文大写形式,例如:print(rmb_upper(123456789.12)) # 壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖元壹角贰分整print(rmb_upper(10000.00)) # 壹万元整print(rmb_upper(0.05)) # 伍分整。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Delphi 人民币大小写转换Delphi 人民币大小写转换时间:2011-5-24来源:yang 作者: peng点击: 745次function TPrintfrm.NumToChar(n: Real): wideString; //可以到万亿,并可随便扩大constcNum: WideString = ‘零壹贰叁肆伍陆柒捌玖-万仟佰拾亿仟佰拾万仟佰拾元角分‘;cCha: array[0..1, 0..11] of string =((‘零仟‘,‘零佰‘,‘零拾‘,‘零零零‘,‘零零‘,‘零亿‘,‘零万‘,‘零元‘,‘亿万‘,‘零角‘,‘零分‘,‘零整‘),( ‘零‘,‘零‘,‘零‘,‘零‘,‘零‘,‘亿‘,‘万‘,‘元‘,‘亿‘,‘零‘,‘整‘,‘整‘)); vari: Integer;sNum :WideString;beginResult := ‘‘;//n := Round(n*10)/10;//FormatFloat(‘0.0‘,)sN um := FormatFloat(‘0‘,n*100);for i := 1 to Length(sNum) doResult := Result + cNum[ord(sNum[i])-47] +cNum[26-Length(sNum)+i];for i:= 0 to 11 do // 去掉多余的零Result := StringReplace(result, cCha[0,i], cCha[1,i], [rfReplaceAll]);end;2009-7-23 14:12:10 第二种方法function TSnnofrm.LowToUpcase(xx: Real): string;vari: Integer;j,dxhj: string;zero: boolean;beginj := FormatFloat(‘0.0‘,xx);j := Trim(IntToStr(Round(xx*100)));if pos(‘.‘,j) &lt;&gt; 0 thenj := Copy(j,1,pos(‘.‘,j)-1);if j = ‘‘ thenj:=‘0‘;if copy(j,length(j),1) = ‘0‘ thenbegindxhj := ‘整‘;zero := True;endelsebegindxhj := ‘‘;zero := False;end; for i := 0 to Length(j)-1 dobeginif StrToInt(Copy(j,Length(j)-i,1)) &lt;&gt; 0 then case i of0: dxhj := ‘分‘+dxhj;1: dxhj := ‘角‘+dxhj;2: dxhj := ‘元‘+dxhj;3: dxhj := ‘拾‘+dxhj;4: dxhj := ‘佰‘+dxhj;5: dxhj := ‘仟‘+dxhj;6: dxhj := ‘万‘+dxhj;7: dxhj := ‘拾‘+dxhj;8: dxhj := ‘佰‘+dxhj;9: dxhj := ‘仟‘+dxhj;10: dxhj := ‘亿‘+dxhj;11: dxhj := ‘拾‘+dxhj;end; case StrToInt(Copy(j,Length(j)-i,1)) of 0:beginif not zero thendxhj := ‘零‘+dxhj;zero := True;end;1:begindxhj := ‘壹‘+dxhj;zero := False;end;2:begindxhj := ‘贰‘+dxhj;zero := False;end;3:begindxhj := ‘叁‘+dxhj;zero := False;4:begindxhj := ‘肆‘+dxhj; zero := False; end;5:begindxhj := ‘五‘+dxhj; zero := False; end;6:begindxhj := ‘六‘+dxhj; zero := False; end;7:begindxhj := ‘七‘+dxhj; zero := False; end;8:dxhj := ‘八‘+dxhj;zero := False;end;9:begindxhj := ‘玖‘+dxhj;zero := False;end;end;end;if dxhj = ‘整‘ thendxhj := ‘‘;Result := dxhj;end;2009-7-23 14:12:54 第三种方法function NumberCn(mNumber: Real): WideString; constcPointCn: WideString = ‘点十百千万十百千亿十百千‘;cNumberCn: WideString = ‘零一二三四五六七八九‘;varI, L, P: Integer;S: string;beginResult := ‘‘;if mNumber = 0 then beginResult := cNumberCn[1];Exit;end;S := FloatToStr(mNumber);if Pos(‘.‘, S) &lt;= 0 then S := S+ ‘.‘;P := Pos(‘.‘, S);L := Length(S);for I := 1 to L doif P &gt; I thenResult := Result + cNumberCn[StrToInt(S[I]) + 1] + cPointCn[P - I]else if P = I then beginResult := StringReplace(Result, ‘零十零‘, ‘零‘, [rfReplaceAll]);Result := StringReplace(Result, ‘零百零‘, ‘零‘,[rfReplaceAll]);Result := StringReplace(Result, ‘零千零‘, ‘零‘, [rfReplaceAll]);Result := StringReplace(Result, ‘零十‘, ‘零‘, [rfReplaceAll]);Result := StringReplace(Result, ‘零百‘, ‘零‘, [rfReplaceAll]);Result := StringReplace(Result, ‘零千‘, ‘零‘, [rfReplaceAll]);Result := StringReplace(Result, ‘零万‘, ‘万‘, [rfReplaceAll]);Result := StringReplace(Result, ‘零亿‘, ‘亿‘, [rfReplaceAll]);Result := StringReplace(Result, ‘亿万‘, ‘亿‘, [rfReplaceAll]);Result := StringReplace(Re sult, ‘零点‘, ‘点‘, [rfReplaceAll]);end else if P &lt; I thenResult := Result + cNumberCn[StrToInt(S[I]) + 1];if Result[Length(Result)] = cPointCn[1] thenResult := Copy(Result, 1, Length(Result) - 1);if Result[1] = cPointCn[1] then Result := cNumberCn[1] + Result;if (Length(Result) &gt; 1) and (Result[2]= cPointCn[2]) and(Result[1] = cNumberCn[2]) thenDelete(Result, 1, 1);end; { NumberCn }function MoneyCn(mMoney: Real): WideString; varP: Integer;beginif mMoney = 0 then beginResult := ‘无‘;Exit;end;Result := NumberCn(Round(mMoney * 100) / 100);Result := StringReplace(Result, ‘一‘, ‘壹‘, [rfReplaceAll]);Result := StringRepla ce(Result, ‘二‘, ‘贰‘, [rfReplaceAll]);Result := StringReplace(Result, ‘三‘, ‘叁‘, [rfReplaceAll]);Result := StringReplace(Result, ‘四‘, ‘肆‘, [rfReplaceAll]);Result := StringReplace(Result, ‘五‘, ‘伍‘, [rfReplaceAll]);Result := StringReplace(Result, ‘六‘, ‘陆‘, [rfReplaceAll]);Result := StringReplace(Result, ‘七‘, ‘柒‘, [rfReplaceAll]);Result := Str ingReplace(Result, ‘八‘, ‘捌‘, [rfReplaceAll]);Result := StringReplace(Result, ‘九‘, ‘玖‘, [rfReplaceAll]);Result := StringReplace(Result, ‘九‘, ‘玖‘, [rfReplaceAll]);Result := StringReplace(Result, ‘十‘, ‘拾‘, [rfReplaceAll]);Result := StringReplace(Result, ‘百‘, ‘佰‘, [rfReplaceAll]);Result := StringReplace(Result, ‘千‘, ‘仟‘, [rfReplaceAll]);P := Pos(‘点‘, Result);if P &gt; 0 then beginInsert(‘分‘, Result, P + 3);Insert(‘角‘, Result, P + 2);Result := StringReplace(Result, ‘点‘, ‘圆‘, [rfReplaceAll]);Result := StringReplace(Result, ‘角分‘, ‘角‘, [rfReplaceAll]);Result := StringReplace(Result, ‘零分‘, ‘‘, [rfReplaceAll]);Result := StringReplace(Result, ‘零角‘, ‘‘, [rfReplaceAll]);Result := St ringReplace(Result, ‘分角‘, ‘‘, [rfReplaceAll]);if Copy(Result, 1, 2) = ‘零圆‘ thenResult := StringReplace(Result, ‘零圆‘, ‘‘,[rfReplaceAll]);end else Result := Result + ‘圆整‘; Re sult := ‘人民币‘ + Result;end;2009-7-23 14:13:36 第四种方法给你个函数吧function Tjfdy.SmallTOBig(small:real):string;varSmallMonth,BigMonth:string;wei1,qianwei1:string[2];qianwei,dianweizhi,qian:integer;begin{------- 修改参数令值更精确-------}{小数点后的位数,需要的话也可以改动该值}qianwei:=-2;{转换成货币形式,需要的话小数点后加多几个零}Smallmonth:=formatfloat(‘0.00‘,small);{---------------------------------}dianweizhi :=pos(‘.‘,Smallmonth);{小数点的位置}{循环小写货币的每一位,从小写的右边位置到左边}for qian:=length(Smallmonth) downto 1dobegin{如果读到的不是小数点就继续}if qian&lt;&gt;dianweizhi thenbegin{位置上的数转换成大写}case strtoint(copy(Smallmonth,qian,1)) of1:wei1:=‘壹‘; 2:wei1:=‘贰‘;3:wei1:=‘叁‘; 4:wei1:=‘肆‘;5:wei1:=‘伍‘; 6:wei1:=‘陆‘;7:wei1:=‘柒‘; 8:wei1:=‘捌‘;9:wei1:=‘玖‘; 0:wei1:=‘零‘;end;{判断大写位置,可以继续增大到real类型的最大值,可是谁有那么多钱}case qianwei of-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 :qia nwei1:=‘十‘;10:qianwei1:=‘佰‘;11:qianwei1:=‘千‘;end;inc(qianwei);BigMonth :=wei1+qianwei1+BigMonth;{组合成大写金额}end;end;SmallTOBig:=BigMonth;end;2009-7-23 14:14:51 第五种方法Function TFormFhdCw.XxToDx(const hjnum:real):String;var Vstr,zzz,cc,cc1,Presult:string; xxbb:array[1..12]of string;uppna:array[0..9] of string; iCount,iZero,vPoint,vdtlno:integer; begin//*设置大写中文数字和相应单位数组*// xxbb[1]:=‘亿‘;xxbb[2]:=‘仟‘;xxbb[3]:=‘佰‘; xxbb[4]:=‘拾‘; xxbb[5]:=‘万‘; xxbb[6]:=‘仟‘; xxbb[7]:=‘佰‘; xxbb[8]:=‘拾‘; xxbb[9]:=‘元‘; xxbb[10]:=‘.‘; xxbb[11]:=‘角‘; xxbb[12]:=‘分‘; uppna[0]:=‘零‘;uppna[1]:=‘壹‘; uppna[2]:=‘贰‘; uppna[3]:=‘叁‘; uppna[4]:=‘肆‘; uppna[5]:=‘伍‘; uppna[6]:=‘陆‘; uppna[7]:=‘柒‘; uppna[8]:=‘捌‘; uppna[9]:=‘玖‘;Str(hjnum:12:2,Vstr); cc:=‘‘;cc1:=‘‘;zzz:=‘‘;result:=‘‘;presult:=‘‘;iZero:=0;vPoint:=0;for iCount:=1 to 10 do begincc:=Vstr[iCount];if cc&lt;&gt;‘ ‘ then beginzzz:=xxbb[iCount];if cc=‘0‘ thenbeginif iZero&lt;1 then //*对“零”进行判断*//cc:=‘零‘elsecc:=‘‘;if iCount=5 then //*对万位“零”的处理*//if copy(result,length(result)-1,2)=‘零‘ then result:=copy(result,1,length(result)-2)+xxbb[iCount] +‘零‘elseresult:=result+xxbb[iCount]; cc1:=cc;zzz:=‘‘;iZero:=iZero+1;endelsebeginif cc=‘.‘ thenbegincc:=‘‘;if (cc1=‘‘) or (cc1=‘零‘) then beginPresult:=copy(result,1,Length(result)-2); result:=Presult;iZero:=15;end;if iZero&gt;=1 thenzzz:=xxbb[9]elsezzz:=‘‘;vPoint:=1;endelsebeginiZero:=0;cc:=uppna[StrToInt(cc)];endend;result:=result+(cc+zzz)end;end;If Vstr[11]=‘0‘ t hen //*对小数点后两位进行处理*//beginif Vstr[12]&lt;&gt;‘0‘ thenbegincc:=‘零‘;result:=result+cc;cc:=uppna[StrToInt(Vstr[12])]; result:=result+(uppna[0]+cc+xxbb[12]); endendelsebeginif iZero=15 thenbegincc:=‘零‘;result:=result+cc;end;cc:=uppna[StrToInt(Vstr[11])]; result:=result+(cc+xxbb[11]); if Vstr[12]&lt;&gt;‘0‘ then begincc:=uppna[StrToInt(Vstr[12])]; result:=result+(cc+xxbb[12]);end;end;result:=result+‘正‘;end;2009-7-23 14:15:36 第六种方法给你一段很短的代码吧,好用,我用过的function TForm1.xTOd(i:Real):string;constd=‘零壹贰叁肆伍陆柒捌玖分角元拾佰仟万拾佰仟亿‘; varm,k:string;j:integer;begink:=‘‘;m:=floattostr(int(i*100));for j:=length(m) downto 1 dok:=k+d[(strtoint(m[Length(m)-j+1])+1)*2-1]+d[(strtoint(m[Length(m)-j+1])+1)*2]+d[(10+j)*2-1]+d[(10+j)* 2];xTOd:=k;end;调用:procedure TForm1.Button1Click(Sender: TObject); varSum:real;beginsum:=12.34;showmessage(‘人民币大写:‘+xTOd(Sum));end;2009-7-23 14:16:47 第七种方法function SmallTOBig(small:real):string;var SmallMonth,BigMonth:string;wei1,qianwei1:string[2];wei,qianwei,dianweizhi,qian:integer;begin{------- 修改参数令值更精确-------}{小数点后的位置,需要的话也可以改动-2值}qianwei:=-2;{转换成货币形式,需要的话小数点后加多几个零} Smallmonth:=formatfloat(‘0.00‘,small);{---------------------------------}dianweizhi :=pos(‘.‘,Smallmonth);{小数点的位置} {循环小写货币的每一位,从小写的右边位置到左边} for qian:=length(Smallmonth) downto 1 do begin{如果读到的不是小数点就继续}if qian&lt;&gt;dianweizhi thenbegin{位置上的数转换成大写}case strtoint(copy(Smallmonth,qian,1)) of1:wei1:=‘壹‘; 2:wei1:=‘贰‘;3:wei1:=‘叁‘; 4:wei1:=‘肆‘;5:wei1:=‘伍‘; 6:wei1:=‘陆‘;7:wei1:=‘柒‘; 8:wei1:=‘捌‘;9:wei1:=‘玖‘; 0:wei1:=‘零‘;end;{判断大写位置,可以继续增大到real类型的最大值} case qianwei of-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;SmallTOBig:=BigMonth;end;2009-7-23 14:17:59 第八种是小写转大写用Delphi编写人民币大小写转换程序本文是大写==&gt;&gt;小写要小写==&gt;&gt;大写请跟我联系!在财务管理系统中,有时需要打印大写人民币数字,于是笔者编写了以下一些函数使这一需要得以满足,现介绍如下:注:copy(2005-Jey-QQ:344430663)本程序在Delphi7、Winwin2000下调试通过。

相关文档
最新文档