当前位置: 首页 > article >正文

C#数字转大写人民币

见过不少人、经过不少事、也吃过不少苦,感悟世事无常、人心多变,靠着回忆将往事串珠成链,聊聊感情、谈谈发展,我慢慢写、你一点一点看......

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('零');
    }
}

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

感情恋爱合集

职业发展故事

常用代码片段

程序开发教程

自我备考经验 


http://www.kler.cn/a/466430.html

相关文章:

  • 第0章 机器人及自动驾驶SLAM定位方法全解析及入门进阶学习建议
  • 3125: 【入门】求1/1+1/2+2/3+3/5+5/8+8/13+13/21……的前n项的和
  • 【工具类】RedisUtil 操作相关
  • 深入理解 Java 接口的回调机制
  • 代码段中使用数据、栈
  • SpringCloud源码-Ribbon
  • docker镜像制作的命令,docker自定义镜像
  • AWS re:Invent 2024 - Dr. Werner Vogels 主题演讲
  • VTK知识学习(28)-区域提取
  • SpringMVC的消息转换器
  • 国产芯RK3568教学实验箱操作案例:颜色识别抓取积木
  • Android 第三方框架:网络框架:OkHttp:源码分析:缓存
  • 基于springboot+vue的校园论坛系统
  • 代码随想录day34 动态规划2
  • js逆向:算法分析某携酒店数据接口参数testab的生成
  • DALL·E 2模型及其论文详解
  • WPF的一些控件的触发事件记录
  • 渗透测试-非寻常漏洞案例
  • 使用IDEA远程debug服务器上的jar包
  • 基于 Python 虎扑网站的 NBA 球员大数据分析与可视化
  • QEMU网络配置简介
  • Wireshark中的名称解析设置详解
  • ROS 2中的DDS中间件
  • 小信号处理
  • LeetCode -Hot100 - 438. 找到字符串中所有字母异位词
  • 前后端分离项目部署到云服务器、宝塔(前端vue、后端springboot)详细教程