C#数字转大写人民币

发布于:2025-02-11 ⋅ 阅读:(27) ⋅ 点赞:(0)
见过不少人、经过不少事、也吃过不少苦,感悟世事无常、人心多变,靠着回忆将往事串珠成链,聊聊感情、谈谈发展,我慢慢写、你一点一点看......

C#实现的将数字金额转换为中文大写金额的辅助类,能处理较大数额。

public static class NumberToChineseCapitalHelper
{
    private static readonly char[] ChineseNumbers = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' };
    private static readonly string[] Units = { "", "拾", "佰", "仟" };
    private static readonly string[] BigUnits = { "", "万", "亿", "兆" };

    public static string ConvertToChineseCapital(decimal amount)
    {
        if (amount == 0m)
            return "零元整";

        if (amount >= 10000000000000000m) 
            throw new ArgumentOutOfRangeException(nameof(amount), "金额超出处理范围。");

        StringBuilder builder = new StringBuilder();

        long integralPart = (long)Math.Floor(amount);
        int fractionalPart = (int)Math.Round((amount - integralPart) * 100); 

        if (fractionalPart < 10)
        {
            if (fractionalPart > 0)
                builder.Append(ChineseNumbers[fractionalPart] + "分");
            if (fractionalPart == 0 || integralPart > 0)
                builder.Insert(0, "零角");
        }
        else
        {
            if (fractionalPart % 10 > 0)
                builder.Append(ChineseNumbers[fractionalPart % 10] + "分");
            if (fractionalPart / 10 > 0)
                builder.Insert(0, ChineseNumbers[fractionalPart / 10] + "角");
        }

        if (integralPart == 0)
        {
            builder.Insert(0, "零元");
        }
        else
        {
            builder.Insert(0, "元");
            bool zeroFlag = false; 
            for (int i = 0; integralPart > 0; i++)
            {
                string temp = "";
                int unitGroup = (int)(integralPart % 10000);
                if (unitGroup > 0)
                {
                    for (int j = 0; j < 4; j++)
                    {
                        int num = unitGroup % 10;
                        if (num > 0)
                        {
                            temp = ChineseNumbers[num] + Units[j] + temp;
                            zeroFlag = true; 
                        }
                        else if (zeroFlag)
                        {
                            temp = "零" + temp;
                            zeroFlag = false; 
                        }
                        unitGroup /= 10;
                    }
                    temp += BigUnits[i]; 
                }
                else if (zeroFlag)
                {
                    temp = "零" + temp; 
                    zeroFlag = false;
                }
                builder.Insert(0, temp);
                integralPart /= 10000;
            }
        }

        return builder.ToString().TrimStart('零');
    }
}

关注我,不失联。有啥问题请留言。

感情恋爱合集

职业发展故事

常用代码片段

程序开发教程

自我备考经验 


网站公告

今日签到

点亮在社区的每一天
去签到