分成四个步骤:

1。数字的转化。阿拉伯数字转换为汉字大写字符

2。整数部分的转化。

分节:四位一组,从个位开始分节

每节转化为汉字大写数值:比如“1234”转化成 “壹仟贰佰叁拾肆万”

每节加上单位:

补零:

整合成最后的数值:

3。 小数不份转化。

十分位转化为‘角’

百分位转化为‘分’

其他位不转化

/// <summary>
        /// 判断是否是数字字符串
        /// </summary>
        /// <param name="str">字符串</param>
        /// <returns>true 是数字字符串,false 不是数字字符串</returns>
        private bool JudgeNumber(string str)
        {
            //用正则表达式的方式判断
            System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"^[-]?/d+[.]?/d*$");
            return reg.IsMatch(str);
        }

/// <summary>
        /// 将阿拉伯字符装换位汉字大写字符,比如‘1’转化为‘壹’
        /// </summary>
        /// <param name="str">阿拉伯字符</param>
        /// <returns>汉字大写字符</returns>
        private string convertnumtochs(string str)
        {
            string[] arr = new string[10] {"零" ,"壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };

string result="";

switch (str)
                {
                    case "0":
                        result = arr[0];
                            break;
                    case "1":
                            result =  arr[1];
                            break;
                    case "2":
                            result =  arr[2];
                            break;
                    case "3":
                            result =  arr[3];
                            break;
                    case "4":
                            result =  arr[4];
                            break;
                    case "5":
                            result =arr[5];
                            break;
                    case "6":
                            result =  arr[6];
                            break;
                    case "7":
                            result = arr[7];
                            break;
                    case "8":
                            result =arr[8];
                            break;
                    case "9":
                            result = arr[9];
                            break;
                }

return result;
        }
        /// <summary>
        /// 将四位阿拉伯数字转化成汉字大写数字,比如'1234' 转化成 '壹仟贰佰叁拾肆'
        /// </summary>
        /// <param name="num">阿拉伯数字</param>
        /// <returns>汉字大写字符</returns>
        string convertfournumber(string num)
        {
            //判断是否阿拉伯数字组成的字符串
            if (!JudgeNumber(num))
                return "";
            //字符串长度超过4个,或者为空,都不处理。
            if (num.Length > 4 || num.Length < 1)
                return "";
            //不足四位的前面补零
            if (num.Length < 4)
            {
                num = "0000" + num;
                num = num.Substring(num.Length - 4, 4);
            }
            //特殊情况
            if (num == "0000")
                return "";
            //临时变量
            string result = "";
            string temp = "";
            string temp1, temp2, temp3;
            //处理四位阿拉伯数字
            //保留各位字符
            temp = num.Substring(0, 1);
            temp1 = num.Substring(1, 1);
            temp2 = num.Substring(2, 1);
            temp3 = num.Substring(3, 1);
            //处理千位,为零不处理
            if (temp != "0")
               result = convertnumtochs(temp) + "仟";
            //一起出来十位,百位
            if (temp1 != "0" && temp2 != "0")    //百位,十位都是非零数字
                result = result + convertnumtochs(temp1) + "佰" + convertnumtochs(temp2) + "拾";
            else
            {
                if (temp1 == "0" && temp2 == "0")   //百位,十位都为零,但是千位,个位都不为零
                {
                    if(temp != "0" && temp3 != "0")
                        result = result + "零";//补个零
                }
                else
                {
                    if (temp1 == "0")  //百位为零,十位不为零,千位不为零
                    {
                        if(temp != "0")
                              result = result + "零" + convertnumtochs(temp2) + "拾";  //千位和十位间补零
                        else
                            result = result +  convertnumtochs(temp2) + "拾";  //千位和十位间补零
                    }
                    else//百位不为零,十位为零
                    {
                        if (temp3 != "0")//个位不为零
                            result = result + convertnumtochs(temp1) + "佰" + "零"; //百位和个位间补零
                        else
                            result = result + convertnumtochs(temp1) + "佰" ; //百位和个位间补零
                    }
                }
            }
            //处理个位,为零不处理
            temp = num.Substring(3, 1);
            if (temp != "0")
                result =result+convertnumtochs(temp) ;
            //返回值
            return result;

}
        /// <summary>
        /// 将一个数字字符串按照指定长度,和方向,截取成一段段的字符串,比如说123456789,截取长度为4,
        /// 从右到左,截取三个字符串,'1','2345','6789'
        /// </summary>
        /// <param name="str">被截取的字符串</param>
        /// <param name="length">截取长度</param>
        /// <param name="type">true:从左往右. false:从右到左</param>
        /// <returns>分段的列表</returns>
        IList<string> breakstring(string str, int length, bool type)
        {
            //保存返回结果
            IList<string> list = new List<string>();
            //两种特殊情况,1.截取的字符长度小于1,被截取的字符串长度小于1
            if (length < 1)
                return list;
            if (str.Length < 1)
                return list;
            //截取的长度大于被截取的字符串长度
            if (length >= str.Length)
            {
                list.Add(str);
                return list;
            }

string temp;
            int positon = 0;//初始位置为零
            int i = 0;//截取次数的标量
            //从左往右截取字符串
            if (type)
            {
                positon = 0;//初始位置为零
                i = 0;//截取次数的标量
                while (positon < str.Length)
                {
                    temp = str.Substring(positon, length);
                    i++;
                    if (temp != "")
                        list.Add(temp);
                    else
                        break;
                    positon = positon +  length;
                }
            }
            else
            {
                positon = str.Length - length;
                if (positon > length*(-1) && positon < 0)//如果str长度小于length长度
                    positon = 0;
                i = 0;
                while (positon >= 0)
                {
                    if (str.Length > length)
                        temp = str.Substring(positon, length);
                    else
                        temp = str;
                    i++;
                    str = str.Substring(0, str.Length - temp.Length);
                    if (temp != "")
                        list.Add(temp);//保存在列表中的顺序是反的
                    else
                        break;
                    positon = positon - length;
                    if (positon > length * (-1) && positon < 0)//被截取字符串最后剩下的长度不到截取的长度
                        positon = 0;
                }
            }
            return list;
        }

/// <summary>
        /// 将一个阿拉伯整数转化成汉字大写数字字符串,处理的最大数字单位为千万亿亿
        /// </summary>
        /// <param name="str">阿拉伯字符串</param>
        /// <returns>汉字大写数字字符串</returns>
        string intconvert(string str)
        {

//特殊情况
            if (!JudgeNumber(str)) //判断字符串中有没有非数字字符
                return "";
            if (str.Length < 1) //字符串为空
                return "";
            //从右往左截断字符串,四位为一组分节
            IList<string> list = breakstring(str, 4, false);
            IList<string> chslist = new List<string>();
            //保留返回结果
            string result = "";
            //数字分节单位,四位为一组分节

//数字分节后的,段数目
            int num = list.Count;
            string temp;
            //一段段全部转化为汉字大写数字
            for (int i = 0; i < 6; i++)
            {
                if (i > num-1) break;
                temp = list[i];
                temp = convertfournumber(temp);
                chslist.Add(temp);
            }
            //每一段补充数字单位,低于万位不需要处理
            //处理万位段

if (chslist.Count > 1)
            {
                if (chslist[1] != "")
                    chslist[1] = chslist[1] + "万";
            }

if (chslist.Count == 3)
            {
                if (chslist[2] != "")
                    chslist[2] = chslist[2] + "亿";
            }
            //处理亿位和万亿位段,同时为空不需要处理
            if (chslist.Count >= 4)
            {
                if (chslist[2] != "" || chslist[3] != "")
                {
                    if (chslist[2] != "" && chslist[3] != "")
                    {
                        chslist[2] = chslist[2] + "亿";
                        chslist[3] = chslist[3] + "万";
                    }
                    else
                    {
                        if (chslist[3] != "")
                            chslist[3] = chslist[3] + "万亿";
                        else
                            chslist[2] = chslist[2] + "亿";
                    }
                }
            }
            if (chslist.Count == 5)
            {
                if (chslist[4] != "")
                    chslist[4] = chslist[4] + "亿亿";
            }
            //处理亿亿位,万亿亿位段,同时为空不需要处理
            if (chslist.Count >= 6)
            {
                if (chslist[4] != "" || chslist[5] != "")
                {
                    if (chslist[4] != "" && chslist[5] != "")
                    {
                        chslist[4] = chslist[4] + "亿亿";
                        chslist[5] = chslist[5] + "万";
                    }
                    else
                    {
                        if (chslist[5] != "")
                            chslist[5] = chslist[5] + "万亿亿";
                        else
                            chslist[4] = chslist[4] + "亿亿";
                    }
                }
            }

//补中间的零位,主要在有数字的段最前面补零,本节上面第一位为0,上节的最后一位有0,就需要补零
            string temp1 ;
            string temp2 ;
            for (int i =0; i<chslist.Count-1; i++)
            {
                temp = chslist[i];
                if (temp != "" )
                {
                    temp1 = list[i];
                    temp2 = list[i + 1];
                    if (temp1.Substring(0, 1) == "0"||temp2.Substring(temp2.Length-1,1)=="0")
                        chslist[i] = "零" + chslist[i];
                }
            }
            //最后获得结果
            for (int i = 0; i < chslist.Count; i++)
                result = chslist[i] + result;
            //除掉开始的'零'
            if (result != "")
            {
                if (result.Substring(0, 1) == "零")
                    result = result.Substring(1, result.Length - 1);
            }
            if (result == "")
                result = "零";
            return result;
        }

//小数部分转化
        string decimalconvert(string str)
        {
            if (!JudgeNumber(str))
                return "";
            string result = "";
            for (int i = 0; i < str.Length; i++)
            {
                if (i == 0)
                    result = result +convertnumtochs( str.Substring(i, 1)) + "角";
                if(i==1)
                    result = result +convertnumtochs( str.Substring(i, 1)) + "分";
                if (i > 2)
                    break;
            }
            return result;
        }
        //整个数值转化,阿拉伯金额转换为汉字大写金额
        string numconvert(string str)
        {
            if(!JudgeNumber(str))
                return "";
            int dotpos = str.IndexOf(".");
            string intnum = "", decimalnum = "";
            if (dotpos < 1)
                intnum = str;
            else
            {
                intnum = str.Substring(0, dotpos);
                decimalnum = str.Substring(dotpos + 1, str.Length - dotpos - 1);
            }
            if (intnum != "")
                intnum = intconvert(intnum);
           
            if (decimalnum != "")
                decimalnum = decimalconvert(decimalnum);

if (intnum == "零" && decimalnum != "")
                intnum = "";

if (intnum != "")
                intnum = intnum + "元";

return intnum + decimalnum;
        }

人民币金额由阿拉伯数值转换成汉字大写数值的函数相关推荐

  1. java数字金额转换成汉字大写

    java数字转换成汉字大写.数字转发票上的人民币大写 1.调用方法 NumToCN.number2CNMontrayUnit(zjJE): 2.转换类 import java.math.BigDeci ...

  2. php大写数字转换,PHP将阿拉伯数字转换成汉字大写支持小数点

    PHP将带有小数点的一串阿拉伯数字转换成汉字大写形式,就像转换人民币大写类似.加入了小数点的处理,只要是一连串的数字,不管是否带有小数点,通过本函数都能完美转换. PHP将阿拉伯数字转换成汉字大写支持 ...

  3. 把一个用阿拉伯数字表示的正整数转换成汉字大写表示

    一个面试题,考查面试者的逻辑思维能力,考虑的问题很多,把一个用阿拉伯数字表示的正整数转换成汉字大写表示 这里代码没有考虑非法输入,但如果是面试.最好跟面试官交流清楚,展现你考虑问题全面,写出的代码鲁棒 ...

  4. php将阿拉伯数字转换成中文大写,PHP将阿拉伯数字转换成汉字大写支持小数点

    第一种 /*function ch_num($num,$mode=true) { $char = array("零","壹","贰",&qu ...

  5. .net数字转换成汉字大写

    public class Num2Rmb { private String[] hanArr={"零","壹","贰","叁&qu ...

  6. 将数字日期转换成汉字大写日期

    function cnDate(enDate) { //用于将"2003-01-14"这种格式的日期更改为"二○○三年一月十四日" var OldYear,Ol ...

  7. 数值转换成大写金额运算

    在记账时,我们经常用大写汉字代替数字进行记账,而我们在数值运算时往往是采用的阿拉伯数字进行的计算,这时我们就需要用到将阿拉伯数值转换成大写金额的数值转换工具,而这篇代码讲的就是这种数值换算运算. 它的 ...

  8. java实现数字金额转换成汉字大写金额

    我们经常在做项目的财务报表,需要打印发票等情况时需要用到小写的财务金额要转换成汉字的大写金额,下面就是实现该功能的代码 import java.lang.Math; /** *通用型金钱转换类 * * ...

  9. win7计算机名改成大写,图文解读win7系统excel数字小写金额转换成汉字大写金额的措施...

    有很多网友在使用电脑的过程总难免会遇到win7系统excel数字小写金额转换成汉字大写金额的情况.针对win7系统excel数字小写金额转换成汉字大写金额的问题,我给大家整理总结了详细的解决步骤.近日 ...

最新文章

  1. Glide 加载圆形头像和gif 图
  2. 基于Android5.0的Camera Framework源码分析 (三)
  3. Math Adventures with Python
  4. Linux安装phpMyAdmin详细步骤
  5. java nio2 iocp_基于JDK7 NIO2的高性能web服务器实践之二(转)
  6. 韩顺平 mysql sqlhelper类_(最全)韩顺平jsp购物车源代码(包含数据库)
  7. 重复包含定义 导致未定义类型不识别错误
  8. C#LeetCode刷题之#707-设计链表(Design Linked List)
  9. 马云:梭梭树就是企业家精神
  10. 【数据结构】思维导图补充知识
  11. Excel、Word VBA 学习笔记
  12. 通过iTunes查看iphone UUID的方法
  13. excel VBA自动化 - 多个工作簿自动合并到一个工作簿
  14. 区块链知识转载博文1: 共识算法之争(PBFT,Raft,PoW,PoS,DPoS,Ripple)
  15. Testflight上架丨苹果官方内测渠道详解
  16. 爬虫爬取qq看点视频
  17. C语言经典面试题 - 字母的大小写转化
  18. SD-Branch多分支组网解决方案
  19. 关于亚马逊测评自养号IP的使用
  20. zookeeper(3)—— zk客户端的使用

热门文章

  1. Java Web课程体系
  2. 使用R语言进行perMANVOA分析NMDS结果多个分组之间显著性
  3. Angular在洋葱圈的实践与思考
  4. 开源传感器网络平台OpenWSN
  5. 冠词,a/an/the --- 元音字母
  6. CANOpen协议详解(二):协议具体内容
  7. UOS系统启动盘制作
  8. Form表单验证神器: BootstrapValidator常见的坑,input框的value值改变二次验证不了?
  9. Java各版本发布时间
  10. python版本切换 for Windows(Anaconda) Linux(pyenv)