金额:数字转汉字

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值