0
点赞
收藏
分享

微信扫一扫

数字转金额大写

废话不多说,直接上代码;

using System.Formats.Asn1;
using System.Runtime.InteropServices;
using System.Text;

while (true)
{
    Console.WriteLine("请输入需要转换的金额;输入Q或q或0结束程序");
    double input = 0;               //input接受用户输入的字符串转换成double类型的值
    bool isFloat = false;           //判断输入的数字是否为小数
    try
    {
        //程序退出的条件
        string inputStr = Console.ReadLine() ?? "0";
        if (inputStr == "q" || inputStr == "Q" || inputStr == "0")
        {
            Console.WriteLine("程序即将退出!!");
            Thread.Sleep(2000);
            break;
        }

        if (inputStr.Split('.')[0].Length > 13)
        {
            Console.WriteLine("最多只能转换到万亿的金额");
            continue;
        }

        input = Convert.ToDouble(inputStr);

        //如果是小数数值就只取小数的后两位,并将isFloat置为true
        if (input % 1 != 0)
        {
            input = Math.Floor(input * 100) / 100;
            //input = Math.Round(input, 2);          //小数位数需要四舍五入可以使用此代码
            input = (int)(input * 100);
            isFloat = true;
        }
    }
    catch (Exception)
    {
        Console.WriteLine("输入的金额有误,请重新输入!");
        continue;
    }

    string result = Get_CN_Upper(input, isFloat);
    Console.WriteLine(result);
}

string Get_CN_Upper(double input, bool isFloat)
{
    List<int> lists = new List<int>();              
    StringBuilder sb = new StringBuilder();
    string[] n = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };                              
    string[] d = { "分", "角", "圆", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万" };

    int count = 0; //定义count记录input是多少位的金额
    while (true)
    {
        if (input < 1)        //当input小于0时,所有的数字都存放到了list列表中
        {
            break;
        }
        //将输入的数字除10得到每个数字实际的值,放到list列表; 
        lists.Add((int)(input % 10));
        input /= 10;
        count++;
    }
    lists.Reverse();   //list的值是反序的,这里再反序回来;
    for (int i = 0; i < lists.Count; i++)
    {
        //根据是否为小数,分别判断单位d从什么位置开始取
        if (isFloat)
        {
            sb.Append(n[lists[i]] + d[count - 1]);  
        }
        else
        {
            sb.Append(n[lists[i]] + d[count + 1]);
        }
        count--;
    }

    //对特殊情况进行处理。
    for (int i = 0; i < sb.Length; i++)
    {
        sb.Replace("零仟", "零");
        sb.Replace("零佰", "零");
        sb.Replace("零拾", "零");
        sb.Replace("零万", "万");
        sb.Replace("零亿", "亿");
        sb.Replace("零零", "零");
        sb.Replace("零圆", "圆");
        sb.Replace("零角", "");
        sb.Replace("零分", "");
    }

    if (isFloat == false)
    {
        sb.Append("整");
    }

    return sb.ToString();
}





举报

相关推荐

0 条评论