zoukankan      html  css  js  c++  java
  • 小写金额转大写金额

    网上找到的,有小BUG,但写的不错.

    亿级数据,尾数为00000的转换会转错,其它还没发现有问题.

     public static string CmycurD(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 * 1, 1);
                                ch2 = str2.Substring(i, 1);
                                nzero = 0;
                            }
                            else
                            {
                                ch1 = str1.Substring(temp * 1, 1);
                                ch2 = str2.Substring(i, 1);
                                nzero = 0;
                            }
                        }
                    }
                    else
                    {
                        //该位是万亿,亿,万,元位等关键位
                        if (str3 != "0" && nzero != 0)
                        {
                            ch1 = "" + str1.Substring(temp * 1, 1);
                            ch2 = str2.Substring(i, 1);
                            nzero = 0;
                        }
                        else
                        {
                            if (str3 != "0" && nzero == 0)
                            {
                                ch1 = str1.Substring(temp * 1, 1);
                                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;
            }
  • 相关阅读:
    Scrapy 概览笔记
    Python 依赖版本控制 (requirements.txt 文件生成和使用)
    Python 虚拟空间的使用
    macOS 所有版本 JDK 安装指南 (with Homebrew)
    鉴权那些事
    Java 位运算符和 int 类型的实现
    ASP.NET Core 入门教程 5、ASP.NET Core MVC 视图传值入门
    如何做好一次知识或技术分享
    ASP.NET Core 入门教程 4、ASP.NET Core MVC控制器入门
    ASP.NET Core 入门教程 3、ASP.NET Core MVC路由入门
  • 原文地址:https://www.cnblogs.com/ybtools/p/3476697.html
Copyright © 2011-2022 走看看