yehao's Blog

数字金额转换为大写(中文)金额

#include <afx.h>
#include
<stdio.h>
CString ChineseCapitalMoney(
double Num)
{
    CString szChMoney,szNum;
   
int iLen, iNum, iAddZero=0;
    TCHAR
* hzUnit[18]={_T(""),_T(""),_T(""),_T(""),_T(""),_T(""),_T(""),_T(""),_T(""),_T(""),_T("亿"),_T(""),_T(""),_T(""),_T(""),_T(""),_T(""),_T("")};
    TCHAR
* hzNum[10]={_T(""),_T(""),_T(""),_T(""),_T(""),_T(""),_T(""),_T(""),_T(""),_T("")};
   
if (-0.01<Num && Num<0.01) return _T("零元整");
    szNum.Format(_T(
"%18.0f"), Num*100); // 最小到分
    szNum.TrimLeft();
    iLen
=szNum.GetLength();
   
if(iLen>15 || iLen==0 || Num<0) return _T(""); // 数据错误返回

   
for(int i=0;i<iLen;i++) {
        iNum
=_ttoi((LPCTSTR)szNum.Mid(i,1));
       
if (iNum==0) {
            iAddZero
++;
        }
else {
           
if (iAddZero>0) szChMoney+=_T("");
            szChMoney
+=hzNum[iNum];
            iAddZero
=0;
        }
       
if (iNum!=0 || iLen-i==3 || iLen-i==11 || ((iLen-i+1)%8==0 && iAddZero<4)) szChMoney+=hzUnit[iLen-i-1];
    }
   
if (szNum.Right(2)==_T("00")) szChMoney+=_T(""); // 没有角和分
    return szChMoney;
}

void main()
{
   
double d;
    CString s;

    d
=-1.0            ;printf("%16.2f %s\n",d,ChineseCapitalMoney(d));
    d
=0.0             ;printf("%16.2f %s\n",d,ChineseCapitalMoney(d));
    d
=1234501234567.89;printf("%16.2f %s\n",d,ChineseCapitalMoney(d));
    d
=1000000000000.01;printf("%16.2f %s\n",d,ChineseCapitalMoney(d));
    d
=1000000000001.00;printf("%16.2f %s\n",d,ChineseCapitalMoney(d));
}
//           -1.00
//            0.00 零元整
//1234501234567.89 壹万贰仟叁佰肆拾伍亿零壹佰贰拾叁万肆仟伍佰陆拾柒元捌角玖分
//1000000000000.01 壹万亿元零壹分
//1000000000001.00 壹万亿零壹元整

posted on 2011-05-18 10:41 厚积薄发 阅读(429) 评论(0)  编辑 收藏 引用 所属分类: 面试题


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

统计

常用链接

留言簿

随笔分类

文章分类

文章档案

搜索

最新评论