C#人民币金额大写转换

高能在最后!。。。



人民币金额大小写转换,三行代码

//完善了一下查询到的方法,支持小数,保留2位小数

  public string NumGetStr(double Num)
        {
            string[] DX_SZ = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "拾" };//大写数字
            string[] DX_DW = { "元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万" };
            string[] DX_XSDS = { "角", "分" };//大些小数单位
            if (Num == 0) return DX_SZ[0];

            Boolean IsXS_bool = false;//是否小数

            string NumStr;//整个数字字符串
            string NumStr_Zs;//整数部分
            string NumSr_Xs = "";//小数部分
            string NumStr_R = "";//返回的字符串


            NumStr = Num.ToString();
            NumStr_Zs = NumStr;
            if (NumStr_Zs.Contains("."))
            {
                NumStr = Math.Round(Num, 2).ToString();
                NumStr_Zs = NumStr.Substring(0, NumStr.IndexOf("."));
                NumSr_Xs = NumStr.Substring((NumStr.IndexOf(".") + 1), (NumStr.Length - NumStr.IndexOf(".") - 1));
                IsXS_bool = true;
            }

            int k = 0;
            Boolean IsZeor = false;//整数中间连续0的情况
            for (int i = 0; i < NumStr_Zs.Length; i++) //整数
            {
                int j = int.Parse(NumStr_Zs.Substring(i, 1));
                if (j != 0)
                {
                    NumStr_R += DX_SZ[j] + DX_DW[NumStr_Zs.Length - i - 1];
                    IsZeor = false; //没有连续0
                }
                else if (j == 0)
                {
                    k++;
                    if (!IsZeor && !(NumStr_Zs.Length == i + 1)) //等于0不是最后一位,连续0取一次
                    {
                        //有问题
                        if (NumStr_Zs.Length - i - 1 >= 4 && NumStr_Zs.Length - i - 1<=6)
                            NumStr_R += DX_DW[4] + "零";
                        else
                            if (NumStr_Zs.Length - i - 1 > 7)
                                NumStr_R += DX_DW[8] + "零";
                        else
                            NumStr_R += "零";

                        IsZeor = true;
                    }

                    if (NumStr_Zs.Length == i + 1)//  等于0且是最后一位 变成 XX元整
                        NumStr_R += DX_DW[NumStr_Zs.Length - i - 1];
                }

            }
            if (NumStr_Zs.Length>2 && k == NumStr_Zs.Length - 1) 
                NumStr_R = NumStr_R.Remove(NumStr_R.IndexOf('零'), 1); //比如1000,10000元整的情况下 去0

            if (!IsXS_bool) return NumStr_R + "整"; //如果没有小数就返回
            else
            {
                for (int i = 0; i < NumSr_Xs.Length; i++)
                {
                    int j = int.Parse(NumSr_Xs.Substring(i, 1));
                    NumStr_R += DX_SZ[j] + DX_XSDS[NumSr_Xs.Length - i - 1];
                }
            }

            return NumStr_R;
        }




2016.6.16更新。

发现这么一段代码,我整个人都。。 

 public static String ConvertToChinese(Decimal number)
        {
            var s = number.ToString("#L#E#D#C#K#E#D#C#J#E#D#C#I#E#D#C#H#E#D#C#G#E#D#C#F#E#D#C#.0B0A");
            var d = Regex.Replace(s, @"((?<=-|^)[^1-9]*)|((?'z'0)[0A-E]*((?=[1-9])|(?'-z'(?=[F-L\.]|$))))|((?'b'[F-L])(?'z'0)[0A-L]*((?=[1-9])|(?'-z'(?=[\.]|$))))", "${b}${z}");
            var r = Regex.Replace(d, ".", m => "负元空零壹贰叁肆伍陆柒捌玖空空空空空空空分角拾佰仟万亿兆京垓秭穰"[m.Value[0] - '-'].ToString());
            return r;
        }

上面那么一大段的这几句也可以实现 呵呵.. Interesting

正则真强大。



  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您好!要将人民币金额转换大写金额,您可以使用以下的 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` 变量的值,以转换不同的金额。 希望这能帮到您!如果您有任何疑问,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值