转载请注明来源:http://www.cnblogs.com/xuesongshu/
思路如下:
1、声明变量:是否负数,是否开头数字是0,
2、声明变量:最后与取绝对值转换的结果串联
3、声明变量:大写数字元数据和大写单位元数据
4、声明变量:绝对值的转换结果,临量变量
5、如果是负数则取绝对值
6、格式化,末尾添加1个小数点和2个0
7、根据字符串长度判断数值,太大则不转
8、对照元数据查询数字对应的中文大写字符,根据字符的位置插入大写单位
9、关于零的处理:以适应中文习惯
10、如果是负数则添加前缀
代码如下:
////////////////////////////////////////////////////////////////////////// //1、声明变量:是否负数,是否开头数字是0, //2、声明变量:最后与取绝对值转换的结果串联 //3、声明变量:大写数字元数据和大写单位元数据 //4、声明变量:绝对值的转换结果,临量变量 //5、如果是负数则取绝对值 //6、格式化,末尾添加1个小数点和2个0 //7、根据字符串长度判断数值,太大则不转 //8、对照元数据查询数字对应的中文大写字符,根据字符的位置插入大写单位 //9、关于零的处理:以适应中文习惯 //10、如果是负数则添加前缀 ////////////////////////////////////////////////////////////////////////// const LPTSTR RmbToUpper(double dNum) { BOOL isNegative=FALSE,isPrevZero=false; TCHAR szFuShu[256]=TEXT("负"); LPTSTR szRmbNum[10]= { TEXT("零"),TEXT("壹"),TEXT("贰"),TEXT("叁"),TEXT("肆"),TEXT("伍"),TEXT("陆"),TEXT("柒"),TEXT("捌"),TEXT("玖") }; LPTSTR szRmbUnit[19]= { TEXT("分"),TEXT("角"),TEXT("."),TEXT("元"),TEXT("拾"),TEXT("佰"),TEXT("仟"),TEXT("万"),TEXT("拾"),TEXT("佰"),TEXT("仟"),TEXT("亿",) TEXT("拾"),TEXT("佰"),TEXT("仟"),TEXT("万"),TEXT("拾"),TEXT("佰"),TEXT("仟") }; TCHAR szRmbUpper[256],szRmbTmp[256]; if(dNum<0) { dNum=abs(dNum); isNegative=TRUE; } _stprintf(szRmbTmp,"%.2lf",dNum); if(lstrlen(szRmbTmp)>19) return NULL; int i=lstrlen(szRmbTmp)-1,c; LPTSTR srcPtr=szRmbTmp,dstPtr=szRmbUpper; for(; *srcPtr; srcPtr++,i--) { if(*srcPtr=='.') continue; c=*srcPtr-'0'; if(c!=0) { lstrcpy(dstPtr,szRmbNum[c]); dstPtr+=2; if(srcPtr==szRmbTmp&&c==1&&lstrcmp(szRmbUnit[i],"拾")==0) dstPtr-=2; lstrcpy(dstPtr,szRmbUnit[i]); dstPtr+=2; isPrevZero=false; continue; } if(isPrevZero) { if(lstrcmp(szRmbUnit[i],"元")==0||lstrcmp(szRmbUnit[i],"万")==0||lstrcmp(szRmbUnit[i],"亿")==0) { dstPtr-=2; *dstPtr=0; if(lstrcmp(dstPtr-2,"亿")) { lstrcpy(dstPtr,szRmbUnit[i]); dstPtr+=2; } isPrevZero=false; } } else { if(lstrcmp(szRmbUnit[i],"元")&&lstrcmp(szRmbUnit[i],"万")&&lstrcmp(szRmbUnit[i],"亿")) { lstrcpy(dstPtr,"零"); dstPtr+=2; isPrevZero=true; } else { lstrcpy(dstPtr,szRmbUnit[i]); dstPtr+=2; isPrevZero=false; } } } i=lstrlen(szRmbUpper); if(lstrcmp(szRmbUpper+i-2,"零")==0) szRmbUpper[i-2]=0; szRmbTmp[0]=szRmbUpper[0]; szRmbTmp[1]=szRmbUpper[1]; szRmbTmp[2]=0; if(lstrcmp(szRmbTmp,"元")==0) { if(szRmbUpper[2]==0) lstrcpy(szRmbUpper,"零元"); else { szRmbTmp[0]=szRmbUpper[2]; szRmbTmp[1]=szRmbUpper[3]; szRmbTmp[2]=0; return lstrcmp(szRmbTmp,"零")==0?szRmbUpper+4:szRmbUpper+2; } } if (isNegative) { lstrcat(szFuShu,szRmbUpper); return szFuShu; } return szRmbUpper; }