关闭

金额:数字转汉字

247人阅读 评论(0) 收藏 举报
分类:
CString ToChineseCapitalMoney(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("玖")};   

	//这样可能会有数字误差,double只有15位有效数字,这里只有13 
	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;   
		}
		//该位不为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("整");

	CString Temp = szChMoney;   
	CString Temp1 = Temp.Left(2);   
	CString Temp2 = Temp.Left(4);   
	if((Temp1 == _T("壹")) && (Temp2 == _T("壹拾")))//满足去除条件   
		szChMoney.Delete(0,2);

	return   szChMoney;  
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:13929次
    • 积分:556
    • 等级:
    • 排名:千里之外
    • 原创:43篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论