zoukankan      html  css  js  c++  java
  • Unicode版人民币小写金额转大写金额

    转载请注明来源: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;
    }
    

      

  • 相关阅读:
    springboot 项目使用阿里云短信服务发送手机验证码
    Vue中el-form标签中的自定义el-select下拉框标签
    解决jQuery中input 失去焦点之后,不能再获取到焦点
    Java操作Jxl实现数据交互。三部曲——《第三篇》
    Java操作Jxl实现数据交互。三部曲——《第二篇》
    springboot搭建项目,实现Java生成随机图片验证码。
    echarts 配置属性参考
    最近用到echarts tab 切换遇到问题 可以参考下
    单位px和em,rem的区别
    关于定位
  • 原文地址:https://www.cnblogs.com/xuesongshu/p/3037354.html
Copyright © 2011-2022 走看看