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;
}
金额:数字转汉字
最新推荐文章于 2021-05-18 19:29:28 发布