c#实现的阿拉伯数字转大写汉字金额

初学c# 请多指教 

废话没有 直接上代码 

//将阿拉伯数字转成大写中文 
        public static string num2String(double num) 
        { 
            if (num >= 1000000000) 
            { 
                Console.WriteLine("num is too large"); 
                return ""; 
            } 
            string result = ""; 
            string front = "";//整数部分 
            string back = "";//小数部分 
            string[] num_strs = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };//大写数字数组 
            string[] num_dw = { "", "拾", "佰", "仟", "万", "拾万", "佰万", "仟万", "亿" };//大写数字单位数组 
            string[] money_dw = { "分", "角", "圆" };//人民币单位数组 
            string str_num = num.ToString(); 
            string[] strs = str_num.Split('.'); 
            if (num < 0)//负数的话 
            { 
                result += "负"; 
                str_num = str_num.Replace("-", ""); 
            } 

            int num_f = 0;//整数部分 
            int num_back = 0;//小数部分 

            if (strs.Length == 2) 
            { 
                front = strs[0]; 
                back = strs[1]; 

                num_f = Convert.ToInt32(front); 
                num_back = Convert.ToInt32(back); 


            } 
            else 
            { 
                front = num.ToString(); 
                num_f = Convert.ToInt32(front); 
            } 

            for (int i = 8; i >= 0; i--)//从八个0 就是亿开始 
            { 
                string cs = "1";//除数 
                for (int j = 1; j <= i; j++)//除数补零 
                { 
                    cs += "0"; 
                } 
                int num_cs = Convert.ToInt32(cs); 
                int s = num_f / num_cs;//商 
                if (s == 0)//商为0意味着除数没有这么大 直接跳到下一次循环 
                { 
                    continue; 
                } 
                else 
                { 
                    result += num_strs[s] + num_dw[i];//针对这一位生成结果 
                    num_f = num_f % num_cs;//整数部分重新赋值成余数继续循环 
                } 
            } 
            result += money_dw[2];//整数位添加货币单位 
            //以下针对结果进行处理使之合理化 
            //循环加零 如2003 不处理将是两千三圆 处理后为两千零三圆 
            //算法为在数字单位数组中从佰开始遍历(第三位)找结果字符串中是否含有它的上一位 如没有则需在此单位的下一位置加入一个“零” 
            for (int i = 2; i < num_dw.Length; i++) 
            { 
                if (result.IndexOf(num_dw[i]) == -1) 
                { 
                    continue; 
                } 

                if (result.IndexOf(num_dw[i - 1]) == -1) 
                { 
                    result = result.Insert(result.IndexOf(num_dw[i]) + 1, "零"); 
                } 
            } 
            //以下处理多出的“万” 如出现二十万两万。。。应为二十二万 
            //算法为保留最后出现的万字 其他去掉 
            string[] strs1 = result.Split('万'); 
            result = ""; 
            //以万字拆分字符串后 遍历结果数组 在结果数组的前一位加上万字 
            for (int i = 0; i < strs1.Length; i++) 
            { 
                result += strs1[i]; 
                if (i == strs1.Length - 2) 
                { 
                    result += "万"; 
                } 

            } 
            //以下处理录入0时 直接生成零圆 
            if (result == money_dw[2]) 
            { 
                result = "零" + money_dw[2]; 
            } 

            //小数部分处理 
            if (back != null && back != "") 
            { 
                if (back.Length > 2)//只截取前两位 到分 在小的无货币单位支持 没有意义 
                { 
                    back = back.Substring(0, 2); 
                } 
                num_back = Convert.ToInt32(back); 

                int s = num_back / 10; 
                int ys = num_back % 10; 
                if (s == 0)//只有角一位 
                { 
                    result += (num_strs[ys] + money_dw[1]); 
                } 
                else 
                { 
                    result += (num_strs[s] + money_dw[1] + num_strs[ys] + money_dw[0]); 
                } 
            } 

            return result; 
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值