转换人民币大小金额

简介:

//方法一: 
   private readonly string _NumChinese = "零壹贰叁肆伍陆柒捌玖"
    
private readonly string _UnitChinese = "仟佰拾亿仟佰拾万仟佰拾圆角分"

    
/// <summary> 
    
/// 小写金额转化成大写金额(只支持精确到分的小写金额) 
    
/// </summary> 
    
/// <returns></returns> 
    public string NumCHN(double Num) 
    { 
        
if (Num <= 0return String.Empty; 

        
string sNum = Num.ToString("F"); 

        
if (sNum.IndexOf("."< 0)//对小数位的处理 
            sNum += "00"
        
else 
            sNum 
= sNum.Replace(".", String.Empty); 

        
string sNumCHN = String.Empty; 

        
if (sNum.Length > _UnitChinese.Length) 
            
throw new Exception("数值太大,无法转化!"); 

        
int nPosition = _UnitChinese.Length - sNum.Length; 

        
for (int i = 0; i < sNum.Length; i++
        { 
            
string cNum = sNum.Substring(i, 1); 

            
for (int j = 0; j < 10; j++
            { 
                
if (Int32.Parse(cNum) == j) 
                { 
                    
if (Int32.Parse(cNum) == 0
                    { 
                        
if (sNumCHN.LastIndexOf(""== sNumCHN.Length - 1
                            
break
                        
else 
                        { 
                            sNumCHN 
+= _NumChinese.Substring(j, 1); 
                            
break
                        } 
                    } 
                    sNumCHN 
+= _NumChinese.Substring(j, 1); 
                    sNumCHN 
+= _UnitChinese.Substring(nPosition, 1); 
                } 
            } 

            nPosition
++
        } 

        
if (sNumCHN.LastIndexOf(""== sNumCHN.Length - 1) sNumCHN = sNumCHN.Substring(0, sNumCHN.Length - 1); 
        
if (sNumCHN.IndexOf(""< 0 && sNumCHN.IndexOf(""< 0) sNumCHN += ""
        
return sNumCHN; 
    } 


//方法二: 
    /**/ 
    
/// <summary>  
    
/// 转换人民币大小金额  
    
/// </summary>  
    
/// <param name="num">金额</param>  
    
/// <returns>返回大写形式</returns>  
    public static string CmycurDD(decimal num) 
    { 
        
string str1 = "零壹贰叁肆伍陆柒捌玖";            //0-9所对应的汉字  
        string str2 = "万仟佰拾亿仟佰拾万仟佰拾元角分"//数字位所对应的汉字  
        string str3 = "";    //从原num值中取出的值  
        string str4 = "";    //数字的字符串形式  
        string str5 = "";  //人民币大写金额形式  
        int i;    //循环变量  
        int j;    //num的值乘以100的字符串长度  
        string ch1 = "";    //数字的汉语读法  
        string ch2 = "";    //数字位的汉字读法  
        int nzero = 0;  //用来计算连续的零值是几个  
        int temp;            //从原num值中取出的值  

        num 
= Math.Round(Math.Abs(num), 2);    //将num取绝对值并四舍五入取2位小数  
        str4 = ((long)(num * 100)).ToString();        //将num乘100并转换成字符串形式  
        j = str4.Length;      //找出最高位  
        if (j > 15) { return "溢出"; } 
        str2 
= str2.Substring(15 - j);   //取出对应位数的str2的值。如:200.55,j为5所以str2=佰拾元角分  

        
//循环取出每一位需要转换的值  
        for (i = 0; i < j; i++
        { 
            str3 
= str4.Substring(i, 1);          //取出需转换的某一位的值  
            temp = Convert.ToInt32(str3);      //转换为数字  
            if (i != (j - 3&& i != (j - 7&& i != (j - 11&& i != (j - 15)) 
            { 
                
//当所取位数不为元、万、亿、万亿上的数字时  
                if (str3 == "0"
                { 
                    ch1 
= ""
                    ch2 
= ""
                    nzero 
= nzero + 1
                } 
                
else 
                { 
                    
if (str3 != "0" && nzero != 0
                    { 
                        ch1 
= "" + str1.Substring(temp * 11); 
                        ch2 
= str2.Substring(i, 1); 
                        nzero 
= 0
                    } 
                    
else 
                    { 
                        ch1 
= str1.Substring(temp * 11); 
                        ch2 
= str2.Substring(i, 1); 
                        nzero 
= 0
                    } 
                } 
            } 
            
else 
            { 
                
//该位是万亿,亿,万,元位等关键位  
                if (str3 != "0" && nzero != 0
                { 
                    ch1 
= "" + str1.Substring(temp * 11); 
                    ch2 
= str2.Substring(i, 1); 
                    nzero 
= 0
                } 
                
else 
                { 
                    
if (str3 != "0" && nzero == 0
                    { 
                        ch1 
= str1.Substring(temp * 11); 
                        ch2 
= str2.Substring(i, 1); 
                        nzero 
= 0
                    } 
                    
else 
                    { 
                        
if (str3 == "0" && nzero >= 3
                        { 
                            ch1 
= ""
                            ch2 
= ""
                            nzero 
= nzero + 1
                        } 
                        
else 
                        { 
                            
if (j >= 11
                            { 
                                ch1 
= ""
                                nzero 
= nzero + 1
                            } 
                            
else 
                            { 
                                ch1 
= ""
                                ch2 
= str2.Substring(i, 1); 
                                nzero 
= nzero + 1
                            } 
                        } 
                    } 
                } 
            } 
            
if (i == (j - 11|| i == (j - 3)) 
            { 
                
//如果该位是亿位或元位,则必须写上  
                ch2 = str2.Substring(i, 1); 
            } 
            str5 
= str5 + ch1 + ch2; 

            
if (i == j - 1 && str3 == "0"
            { 
                
//最后一位(分)为0时,加上“整”  
                str5 = str5 + ''
            } 
        } 
        
if (num == 0
        { 
            str5 
= "零元整"
        } 
        
return str5; 
    } 

    
/**/ 
    
/// <summary>  
    
/// 一个重载,将字符串先转换成数字在调用CmycurD(decimal num)  
    
/// </summary>  
    
/// <param name="num">用户输入的金额,字符串形式未转成decimal</param>  
    
/// <returns></returns>  
    public static string CmycurD(string numstr) 
    { 
        
try 
        { 
            
decimal num = Convert.ToDecimal(numstr); 
            
return CmycurDD(num); 
        } 
        
catch 
        { 
            
return "非数字形式!"
        } 
    }  

 

 

 

 

JavaScript版:

 

代码

 

 

using  System.Text.RegularExpressions;

复制代码
          string  s  =   double .Parse( this .TextBox1.Text).ToString( " #L#E#D#C#K#E#D#C#J#E#D#C#I#E#D#C#H#E#D#C#G#E#D#C#F#E#D#C#.0B0A " ); // d + "\n" +
          string  d  =  Regex.Replace(s,  @" ((?<=-|^)[^1-9]*)|((?'z'0)[0A-E]*((?=[1-9])|(?'-z'(?=[F-L\.]|$))))|((?'b'[F-L])(?'z'0)[0A-L]*((?=[1-9])|(?'-z'(?=[\.]|$)))) " " ${b}${z} " );
         Response.Write( Regex.Replace(d, 
" . " delegate (Match m) {  return   " 负元空零壹贰叁肆伍陆柒捌玖空空空空空空空分角拾佰仟萬億兆京垓秭穰 " [m.Value[ 0 -   ' - ' ].ToString(); }));
复制代码
    本文转自曾祥展博客园博客,原文链接: http://www.cnblogs.com/zengxiangzhan/archive/2009/09/12/1565300.html ,如需转载请自行联系原作者
相关文章
|
6月前
银行定期存款利率,输入金额,输入年限,计算本息总额
银行定期存款利率,输入金额,输入年限,计算本息总额
83 0
数字 金额 相关 转换
数字 金额 相关 转换
61 0
|
测试技术
【解决方案 二十三】带单位的数值转大写人民币金额
【解决方案 二十三】带单位的数值转大写人民币金额
110 0
|
机器学习/深度学习
某销售公司在年末的时候会向员工发放红包,发放的红包金额共有5种,获取的条件各不相同:   1) 五颗星红包,每人8000元,平均月绩效大于80件商品(>80),并且在本年度满勤; 2) 四颗星红包,每
某销售公司在年末的时候会向员工发放红包,发放的红包金额共有5种,获取的条件各不相同:   1) 五颗星红包,每人8000元,平均月绩效大于80件商品(>80),并且在本年度满勤; 2) 四颗星红包,每
231 0
|
JavaScript 前端开发
使用 JavaScript 根据消费金额和消费者是否为会员确定折扣,最终核算实际应该支付的金额
使用 JavaScript 根据消费金额和消费者是否为会员确定折扣,最终核算实际应该支付的金额
462 0
使用 JavaScript 根据消费金额和消费者是否为会员确定折扣,最终核算实际应该支付的金额
|
传感器 存储 供应链
合约机又来了?Redmi K30i曝光,起售价仅1799元
Redmi K30系列大概是红米更新时间最长的手机了,从2019年12月发布Redmi K30开始,到今年3月才更新完,这个系列包括Redmi K30、Redmi K30 5G、Redmi K30 Pro和Redmi K30 Pro Zoom。不过根据最新消息,这个大家庭很可能还要增加一位新成员——Redmi K30i。
206 0
合约机又来了?Redmi K30i曝光,起售价仅1799元
|
SQL 关系型数据库 MySQL
电商金额计算的 4 个坑,千万注意了!
前言 电商项目开发时肯定少不了金额计算,金额计算时有很多让人坑人的地方,在此记录,以免被坑。
|
数据中心
A股融资融券余额是什么意思?
同花顺>数据中心>融资融券 市场融资融券交易总量=本日融资余额+本日融券余量金额 * 本日融资余额=前日融资余额+本日融资买入额-本日融资偿还额; * 本日融资偿还额=本日直接还款额+本日卖券还款额+本日融资强制平仓额+本日融资正权益调...
4687 0