C# 小写金额转中文大写金额

private static String[] DX_Num = { " 零", " 壹", " 贰", " 叁", " 肆", " 伍", " 陆", " 柒", " 捌", " 玖" };
private static String[] DX_Yuan = { " 元", " 拾", " 佰", " 仟", " 万", " 拾", " 佰", " 仟", " 亿", " 拾", " 佰", " 仟", " 万" };
private static String[] DW_X = { " 角", " 分" };

/// <summary>
/// 金额小写转中文大写。
/// 整数支持到万亿;小数部分支持到分(超过两位将进行Banker舍入法处理)
/// </summary>
/// <param name="Num">需要转换的双精度浮点数</param>
/// <returns>转换后的字符串</returns>
public static String NumGetStr(Double Num)
{
    string NumStr;//整个数字字符串
    string NumStr_Zh;//整数部分
    string NumSr_X = "";//小数部分
    string NumStr_DQ;//当前的数字字符
    string NumStr_R = "";//返回的字符串

    Num = Math.Round(Num, 2);//四舍五入取两位
    //各种非正常情况处理
    if (Num < 0)
        return "转换失败";
    else if (Num > 9999999999999.99)
        return "金额过大,无法转换";
    else if (Num == 0)
        return DX_Num[0] + DX_Yuan[0];
    else
    {
        NumStr = Num.ToString();
        //分开整数与小数处理
        if (NumStr.IndexOf(".") != -1)
        {
            NumStr_Zh = NumStr.Substring(0, NumStr.IndexOf("."));
            NumSr_X = NumStr.Substring(NumStr.IndexOf(".") + 1);
        }
        else
        {
            NumStr_Zh = NumStr;
        }
        //判断是否有整数部分
        if (int.Parse(NumStr_Zh) > 0)
        {
            int len = NumStr_Zh.Length - 1;
            //整数部分转换
            for (int a = 0; a <= len; a++)
            {
                NumStr_DQ = NumStr_Zh.Substring(a, 1);
                if (int.Parse(NumStr_DQ) != 0)
                {
                    NumStr_R += DX_Num[int.Parse(NumStr_DQ)] + DX_Yuan[len - a];
                }
                else
                {
                    if ((len - a) == 0 || (len - a) == 4 || (len - a) == 8)
                        NumStr_R += DX_Yuan[len - a];
                    if ((a + 1) <= len)
                    {
                        NumStr_DQ = NumStr_Zh.Substring((a + 1), 1);
                        if (int.Parse(NumStr_DQ) == 0)
                            continue;
                        else
                            NumStr_R += DX_Num[0];
                    }
                }
            }
        }
        //判断是否含有小数部分
        if (NumSr_X != "" && int.Parse(NumSr_X) > 0)
        {
            //小数部分转换
            for (int b = 0; b < NumSr_X.Length; b++)
            {
                NumStr_DQ = NumSr_X.Substring(b, 1);
                if (int.Parse(NumStr_DQ) != 0)
                    NumStr_R += DX_Num[int.Parse(NumStr_DQ)] + DW_X[b];
                else
                {
                    if ((b + 1) < NumSr_X.Length)
                    {
                        NumStr_DQ = NumSr_X.Substring((b + 1), 1);
                        if (int.Parse(NumStr_DQ) == 0)
                            continue;
                    }
                    if (b != (NumSr_X.Length - 1))
                        NumStr_R += DX_Num[0];
                }
            }
        }
        else
        {
            NumStr_R += "整";
        }
        return NumStr_R;
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值