人民币小写转大写BCB代码

//--------------------------------------
//用法:  将dx.h拷到程序所在目录
//在调用表单首部加上 #include dx.h
//调用方式: Edit1->Text = dx("132456");
//注:不能带小数点,金额扩大一百倍输入
//----------------------------------------
#include <math.h>
#include <stdio.h>
AnsiString dx(AnsiString s)
{
    if((s.Length() <= 0) && (s.ToIntDef(0) == 0))
        return "币零元零角整";
    AnsiString odxc, odxs, oszc, oscc, oscc0;
    int oi, oi0, i;
    double ormb=StrToFloat(s); //金额小写
    if(ormb == 0.00)
        return "币零元零角整";
    odxc="分角圆拾佰仟万拾佰仟亿拾佰仟万拾佰仟亿";
    odxs="零壹贰叁肆伍陆柒捌玖";
    oszc=FloatToStr(abs(ormb));
    i=AnsiPos('.', s);
    oszc.Delete(i, 1); // stuf(oszc, 18, 1, '');
    oszc=Trim(oszc);
    oscc="";
    oi0=0;
    for(oi=oszc.Length(); oi>0; oi--)
    {
        oscc=odxc.SubString(oi0*2+1, 2)+oscc;
        oscc=odxs.SubString(StrToInt(oszc.SubString(oi, 1))*2+1, 2)+oscc;
        oi0++;
    }
    oscc0="";
    for(oi=1; oi <= oscc.Length(); oi=oi+4)
    {
        if(oscc.SubString(oi, 2) == "零")
        {
            if(oscc.SubString(oi+2, 2) == "万")
            {
                if(oscc0.SubString(oscc0.Length()-3, 4) != "亿零")
                {
                    if(oscc0.SubString(oscc0.Length()-1, 2) == "零")
                        oscc0=oscc0.SubString(1, oscc0.Length()-2)+"万";
                    else oscc0=oscc0+"万";
                }
                continue;
            }
            if(oscc.SubString(oi+2, 2) == "圆")
            {
                if(oscc0.SubString(oscc0.Length()-1, 2) == "零")
                    oscc0=oscc0.SubString(1, oscc0.Length()-2)+"圆";
                else oscc0=oscc0+"圆";
                    continue;
            }
            if(oscc.SubString(oi+2, 2) == "亿")
            {
                if(oscc0.SubString(oscc0.Length()-1, 2) == "零")
                    oscc0=oscc0.SubString(1, oscc0.Length()-2)+"亿";
                else oscc0=oscc0+"亿";
                    continue;
            }
            if(oscc0.SubString(oscc0.Length()-1, 2) != "零")
                oscc0=oscc0+"零";
        }
        else oscc0=oscc0+oscc.SubString(oi, 4);
    }
    if((oscc0.SubString(oscc0.Length()-3, 4) == "圆零"))
    {
        oscc0=oscc0.SubString(1, oscc0.Length()-2)+"整";
        return oscc0;
    }
    if((oscc0.SubString(oscc0.Length()-3, 4) == "角零"))
    {
        oscc0=oscc0.SubString(1, oscc0.Length()-2)+"整";
        return oscc0;
    }
    if((oscc0.SubString(oscc0.Length()-1, 2) == "零"))
        oscc0=oscc0.SubString(1, oscc0.Length()-2)+"圆整";
    return oscc0;
}
/
String UpperMoney(double jn)
{
    int L, ZL, Z, U, V;
    AnsiString F = "壹贰叁肆伍陆柒捌玖";
    AnsiString G = "元万亿万拾佰仟分角";
    AnsiString AA, B, JNS;
    JNS.SetLength(255);
    double je;
    if(jn <= 0)
        return "零";
    je=(jn<1?jn*100:jn);
    //printf(JNS.c_str(),"%26.2f",je) ;
    JNS=TrimRight(TrimLeft(JNS));
    L = StrLen(JNS.c_str());
    L=(jn<1?(jn<0.1?1:2):L);
    ZL = L+1;
    AA =AnsiString("");
    B = AnsiString("");
    for(; L>0; )
    {
        Z = StrToInt(JNS.SubString(ZL-L, 1));
        U = int(L/4);
        V = L%4;
        if(Z>0)
        {
            U=(V == 0?U+U-1:V+V+(U>0?7:13));
            AA = AA+B+F.SubString(Z+Z-1, 2)+G.SubString(U, 2);
            B = "";
        }
        else
        {
            if(L == 1)
                AA=AA+"整";
            else
            {
                if(V == 0)
                    AA=AA+G.SubString(U*2-1, 2);
                else
                    AA=AA+"";
            }
            B=(V >= 0?"零":"");
        }
        L=(L == 4?2:L-1);
    }
    return AA;
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
//--------------------------------------------------------------------------- #include #pragma hdrstop #include #include #include #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- AnsiString TForm1::num_str(Variant ls) { AnsiString dx_sz,dx_dw,str_int,str_dec,dx_str,fu; AnsiString a,b,b2,c,d; int num_int,num_dec,len_int,i,a_int,pp; //dx—str为返回字符串 dx_sz="零壹贰叁肆伍陆柒捌玖"; dx_dw="万仟佰拾亿仟佰拾万仟佰拾元"; //dx_dw="元拾佰仟万拾佰仟亿拾佰仟万"; //处理金额小于零情况 if (ls0)&&(ls0) str_int=dx_str.SubString (1,dx_str.AnsiPos(".")-1);} else str_int=dx_str; num_int=StrToInt(str_int*100)/100; str_int=(str_int*100)/100; //取得小数值及小数串 if ((ls>0)&&(ls<1))num_dec=ls*100; else num_dec=(ls-num_int)*100; str_dec=IntToStr(num_dec); // ShowMessage(str_dec); len_int=str_int.Length(); dx_str=""; // ShowMessage(len_int); // ShowMessage((ls-num_int)*100); //换整数部分 // for i:=1 to len—int do for (i=1;i<=len_int;i++) { //a为小写数字字符,b为对应的大写字符 //c为对应大写单位,d为当前大写字符串的最后一个汉字 a=str_int.SubString(i,1); a_int=StrToInt(a); b=dx_sz.SubString((a_int*2+1),2);// b=copy(dx_sz,(a_int2+1),2); c=dx_dw.SubString(((14-len_int+i-1)*2-1),2); if(dx_str!="")d=dx_str.SubString((dx_str.Length()-1),2); else d=""; if ((b=="零")&&((d=="零")||(b==b2)||(c=="元")||(c=="万")||(c=="亿"))) b=""; if ((a=="0")&&(c!="元")&&(c!="万")&&(c!="亿"))c=""; if (((c=="元")||(c=="万")||(c=="亿"))&&(d=="零")&&(a=="0")) {dx_str=dx_str.SubString(1,dx_str.Length()-2); d=dx_str.SubString(dx_str.Length()-1,2); if (((c=="元")&&(d=="万"))||((c=="万")&&(d=="亿")))c=""; } dx_str=dx_str+b+c; b2=b; // ShowMessage(a+";"+b+";"+c+";"+d); } //处理金额小于1的情况 if (dx_str.Length()<=2)dx_str=""; //换小数部分 if ((num_dec0)) { a_int=StrToInt(str_dec); //ShowMessage(a_int); b=dx_sz.SubString((a_int*2+1),2); if (num_dec==0) dx_str=dx_str+"整"; if(num_dec>0)dx_str=dx_str+"零"+b+"分"; } if(num_dec>=10) { a_int=StrToInt(str_dec.SubString(1,1)); a=dx_sz.SubString((a_int*2+1),2); a_int=StrToInt(str_dec.SubString(2,1)); b=dx_sz.SubString((a_int*2+1),2); if (a!="零")a=a+"角"; if (b!="零")b=b+"分"; else b=""; dx_str=dx_str+a+b; } if (ls==0) dx_str="零元整"; dx_str=fu+dx_str; //函数返回字符串 return dx_str; } void __fastcall TForm1::Button1Click(TObject *Sender) { Edit2->Text=num_str(Edit1->Text); ShowMessage(Edit2->Text); } //---------------------------------------------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值