C#金额转大写的方法

最近搞的项目里面有个财务模块,需要把数字金额转为大写显示,网上搜了一下要么代码太繁琐要么不符合书写习惯(会出现零佰零仟,整数没有结尾之类的问题),于是琢磨了一下自己写了个方法。原理很简单,就是循环替换数字,添加单位,然后再来一个循环排除例外情况。

代码如下:

        public string NumtoChinese(decimal s)
        {
            s = Math.Round(s, 2);//四舍五入到两位小数,即分
            string[] n = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
            //数字转大写
            string[] d = { "", "分", "角", "元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿" };
            //不同位置的数字要加单位
            List<string> needReplace = new List<string> { "零拾", "零佰", "零仟", "零万","零亿","亿万", "零元", "零零", "零角", "零分" };
            List<string> afterReplace = new List<string> { "零", "零", "零", "万","亿","亿", "元", "零", "", "" };//特殊情况用replace剔除
            string b = "人民币";//开头
            string e = s % 1 == 0 ? "整" : "";//金额是整数要加一个“整”结尾
            string re = "";
            Int64 a = (Int64)(s * 100);
            int k = 1;
            while (a != 0)
            {//初步转换为大写+单位
                re = n[a % 10] + d[k] + re;
                a = a / 10;
                k = k < 11 ? k + 1 : 4;
            }
            string need = needReplace.Where(tb => re.Contains(tb)).FirstOrDefault<string>();
            while (need != null)
            {
                int i = needReplace.IndexOf(need);
                re = re.Replace(needReplace[i], afterReplace[i]);
                need = needReplace.Where(tb => re.Contains(tb)).FirstOrDefault<string>();
            }//循环排除特殊情况
            re = re == "" ? "" : b + re + e;
            return re;
        }

输出结果以“人民币”开头,整数金额以“整”结尾,阿拉伯数字出现多个连续的0时会替换为显示一个“零”。

常见的不符合规范的输出都做了替换,如果有例外直接在needReplace和afterReplace中添加即可。

测试了一下,由于Int64长度限制,在金额达到亿亿数量级时会出现溢出错误(不过也没人会用这么大的金额吧,懒得改了)

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!要将人民币金额换为大写金额,您可以使用以下的 C# 代码示例: ```csharp using System; class Program { static string[] chineseDigits = new string[] { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; static string[] chineseUnits = new string[] { "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿" }; static string ConvertToChinese(double amount) { string amountStr = amount.ToString("F2"); // 将金额保留两位小数,换为字符串 string[] parts = amountStr.Split('.'); // 拆分整数部分和小数部分 string chineseInteger = ConvertIntegerToChinese(parts[0]); // 换整数部分 string chineseDecimal = ConvertDecimalToChinese(parts[1]); // 换小数部分 if (string.IsNullOrEmpty(chineseDecimal)) { return chineseInteger + "元整"; } else { return chineseInteger + "元" + chineseDecimal; } } static string ConvertIntegerToChinese(string intPart) { string result = ""; int length = intPart.Length; bool isZero = true; // 是否需要补零 for (int i = 0; i < length; i++) { int digit = int.Parse(intPart[i].ToString()); int unitPos = length - i - 1; string digitStr = chineseDigits[digit]; if (digit != 0) { isZero = false; result += digitStr + chineseUnits[unitPos]; } else { if (unitPos == 4 && !isZero) // 处理万位的零 { result += digitStr; isZero = true; } else if (unitPos == 8) // 处理亿位的零 { result += digitStr; isZero = true; } } } return result; } static string ConvertDecimalToChinese(string decimalPart) { string result = ""; int length = decimalPart.Length; for (int i = 0; i < length; i++) { int digit = int.Parse(decimalPart[i].ToString()); if (digit != 0) { result += chineseDigits[digit] + chineseUnits[i - length]; } } return result; } static void Main(string[] args) { double amount = 123456.78; // 替换为您要换的金额 string chineseAmount = ConvertToChinese(amount); Console.WriteLine(chineseAmount); } } ``` 以上代码将金额 `123456.78` 换为大写金额 `壹拾贰万叁仟肆佰伍拾陆元柒角捌分`。 您可以在 `Main` 方法中修改 `amount` 变量的值,以换不同的金额。 希望这能帮到您!如果您有任何疑问,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值