阿拉伯数字转中文数字(大写或小写)

4 篇文章 1 订阅
3 篇文章 1 订阅

本人用 C# 实现,其它 高级语言 同理

/*
 * 将数字转化为中文大小写数字
 * 
 * 主要分三部分:千位,万位,亿位(更高位同理扩展)
 * 一、千位
 * 1、个:直接将数字作为 chineseNumber 数组的索引即可
 * 
 * 2、十:先判断是否为 10 的倍数,且 10 这个数字要做一个特定判断,
 * 因为我们常说 十 而不是 一十,只有当长度超过 两位 时(作为底位)我们才会说 一十,
 * 然后个位再进行 个 的调用即可
 * 
 * 3、百:先判断是否为 100 的倍数,不是的话然后再判断 底两位 的值长度是否等于 2,
 * 即是否大于等于 10,不大于的话则 加零字,大于的话直接调用 十(该十为地位) 的方法即可
 * 
 * 4、千:先判断是否为 1000 的倍数,不是的话再判断 底三位 的值长度是否等于 3,
 * 即是否大于等于 100,不大于的话则 加零字,大于的话直接调用 百 的方法即可,
 * 不大于再判断 底三位 的值长度是否等于 2,等于则 加零字 再调用 十的方法,
 * 最后再判断 底三位 的值长度是否等于 1,等于则 加零字 再调用 个 的方法,
 * 
 * 
 * 二、万位
 * 1、高 4 位:直接调用 千 方法即可,然后 加万字
 * 2、低 4 为:判断 低 4 位 值长度,若等于 0,则直接跳过,
 * 若不等于 4,加零字 再调用 转中文方法(会根据值长度自动判断调用哪个方法),
 * 等于 4 则直接调用 千方法
 * 
 * 
 * 三、亿位
 * 1、高 4 位:直接调用 千 方法即可,然后 加亿字
 * 2:低 8 位:判断 值长度 是否等于 8,若不等于,则 加零字 在调用 
 * 转中文方法,若等于,则直接调用 转中文方法
 * 
 * 再 高位 同理扩展即可,将 小写数组改成大写 即可成为中文大写
 */

public static char[] chineseNumber = { '零', '一', '二', '三', '四', '五', '六', '七', '八', '九' };

public static char[] unit = { '零', '十', '百', '千', '万', '亿' };
//public static char[] chineseNumber = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' };

//public static char[] unit = { '零', '拾', '佰', '仟', '万', '亿' };
// 获取值长度
public static int GetNumberLength(string str) {
    return int.Parse(str).ToString().Length;
}
// 获取值长度:重载
public static int GetNumberLength(int num) {
    return GetNumberLength(num.ToString());
}
// 个
public static string GetSingleChineseNumber(int num) {
    return chineseNumber[num].ToString();
}
// 个:重载
public static string GetSingleChineseNumber(char c) {
    return GetSingleChineseNumber(int.Parse(c.ToString()));
}
// 十
private static string ParseTwoNumberToChinese(string num, bool isLow) {
    return ParseTwoNumberToChinese(int.Parse(num), isLow);
}
private static string ParseTwoNumberToChinese(long num, bool isLow) {
    string str = "";
    string strNum = num.ToString();
    if (num % 10 == 0) {
        if (num == 10) {
            str = isLow ? GetSingleChineseNumber(strNum[0]) + unit[1].ToString() : unit[1].ToString();
        } else {
            str = GetSingleChineseNumber(strNum[0]) + unit[1];
        }
    } else {
        str = GetSingleChineseNumber(strNum[0]) + unit[1] + GetSingleChineseNumber(strNum[1]);
    }
    return str;
}
// 百
private static string ParseThreeNumberToChinese(string num) {
    return ParseThreeNumberToChinese(int.Parse(num));
}
private static string ParseThreeNumberToChinese(long num) {
    string strNum = num.ToString();
    string str = GetSingleChineseNumber(strNum[0]) + unit[2].ToString();
    if (num % 100 == 0) {
        return str;
    } else {
        string strTwoNum = strNum.Substring(1);
        if (GetNumberLength(strTwoNum) == 2) {
            str += ParseTwoNumberToChinese(strTwoNum, true);
        } else {
            str += unit[0] + GetSingleChineseNumber(strTwoNum[1]);
        }
    }
    return str;
}
// 千
private static string ParseFourNumberToChinese(long num) {
    string strNum = num.ToString();
    string str = GetSingleChineseNumber(strNum[0]) + unit[3].ToString();
    if (num % 1000 == 0) {
        return str;
    } else {
        string strThreeNum = strNum.Substring(1);
        if (GetNumberLength(strThreeNum) == 3) {
            str += ParseThreeNumberToChinese(strThreeNum);
        } else if (GetNumberLength(strThreeNum) == 2) {
            str += unit[0] + ParseTwoNumberToChinese(strThreeNum, true);
        } else {
            str += unit[0] + GetSingleChineseNumber(strThreeNum[2]);
        }
    }
    return str;
}
// 万
private static string ParseWanUnitNumberToChinese(long num) {
    string strNum = num.ToString();
    string strHighFourUnit = strNum.Substring(0, strNum.Length - 4);
    string strLowFourUnit = strNum.Substring(strNum.Length - 4);
    string str = ParseNumberToChinese(strHighFourUnit) + unit[4];
    if (int.Parse(strLowFourUnit) == 0) {
        return str;
    }
    if (GetNumberLength(strLowFourUnit) != 4) {
        str += unit[0];
    }
    str += ParseNumberToChinese(strLowFourUnit);
    return str;
}
// 亿
private static string ParseYiUnitNumberToChinese(long num) {
    string strNum = num.ToString();
    string strHighFourUnit = strNum.Substring(0, strNum.Length - 8);
    string strLowEightUnit = strNum.Substring(strNum.Length - 8);
    string str = ParseNumberToChinese(strHighFourUnit) + unit[5];
    if (int.Parse(strLowEightUnit) == 0) {
        return str;
    }
    if (GetNumberLength(strLowEightUnit) != 8) {
        str += unit[0];
    }
    str += ParseNumberToChinese(strLowEightUnit);
    return str;
}
public static string ParseNumberToChinese(string num) {
    return ParseNumberToChinese(long.Parse(num));
}
public static string ParseNumberToChinese(long num) {
    string str = "";
    string strNum = num.ToString();
    switch (strNum.Length) {
        case 1:
            str = chineseNumber[num].ToString();
            break;
        case 2:
            str = ParseTwoNumberToChinese(num, false);
            break;
        case 3:
            str = ParseThreeNumberToChinese(num);
            break;
        case 4:
            str = ParseFourNumberToChinese(num);
            break;
        case 5:
        case 6:
        case 7:
        case 8:
            str = ParseWanUnitNumberToChinese(num);
            break;
        case 9:
        case 10:
        case 11:
        case 12:
            str = ParseYiUnitNumberToChinese(num);
            break;
        default:
            break;
    }
    return str;
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值