c# 金额小写转大写(财务金额)

这个博客分享了一段C#代码,用于将数字四舍五入到两位小数后转换为中文大写形式。算法中包含了处理特殊数字组合的逻辑,如去除多余的零,并在末尾添加'整'字。此代码适用于财务报表或发票中的数字转换场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public static 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 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 == "" ? "" : re + e;
    return re;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值