本人用 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;
}