阿拉伯金额转中文大写及英文格式
2008-01-30 15:56
309 查看
金额大写#region 金额大写
/**//// <summary>
/// 转换数字金额主函数(包括小数)
/// </summary>
/// <param name="str">数字字符串</param>
/// <returns>转换成中文大写后的字符串或者出错信息提示字符串</returns>
public string ConvertSum(string str)
...{
if (!IsPositveDecimal(str))
return "格式错误!";
if (Double.Parse(str) > 999999999999.99)
return "金额溢出";
char[] ch = new char[1];
ch[0] = '.'; //小数点
string[] splitstr = null; //定义按小数点分割后的字符串数组
splitstr = str.Split(ch[0]);//按小数点分割字符串
if (splitstr.Length == 1) //只有整数部分
return ConvertData(str) + "圆整";
else //有小数部分
...{
string rstr;
rstr = ConvertData(splitstr[0]) + "圆";//转换整数部分
string xiaoshu=ConvertXiaoShu(splitstr[1]);
rstr += (xiaoshu == "") ? "整" : xiaoshu;//转换小数部分
return rstr;
}
}
/**//// <summary>
/// 判断是否是正数字字符串
/// </summary>
/// <param name="str"> 判断字符串</param>
/// <returns>如果是数字,返回true,否则返回false</returns>
public bool IsPositveDecimal(string str)
...{
Decimal d;
try
...{
d = Decimal.Parse(str);
}
catch (Exception)
...{
return false;
}
if (d > 0)
return true;
else
return false;
}
/**//// <summary>
/// 转换数字(整数)
/// </summary>
/// <param name="str">需要转换的整数数字字符串</param>
/// <returns>转换成中文大写后的字符串</returns>
public string ConvertData(string str)
...{
string tmpstr = "";
string rstr = "";
int strlen = str.Length;
if (strlen <= 4)//数字长度小于四位
...{
rstr = ConvertDigit(str);
}
else
...{
if (strlen <= 8)//数字长度大于四位,小于八位
...{
tmpstr = str.Substring(strlen - 4, 4);//先截取最后四位数字
rstr = ConvertDigit(tmpstr);//转换最后四位数字
tmpstr = str.Substring(0, strlen - 4);//截取其余数字
//将两次转换的数字加上萬后相连接
rstr = String.Concat(ConvertDigit(tmpstr) + "萬", rstr);
rstr = rstr.Replace("零萬", "萬");
rstr = rstr.Replace("零零", "零");
}
else
if (strlen <= 12)//数字长度大于八位,小于十二位
...{
tmpstr = str.Substring(strlen - 4, 4);//先截取最后四位数字
rstr = ConvertDigit(tmpstr);//转换最后四位数字
tmpstr = str.Substring(strlen - 8, 4);//再截取四位数字
rstr = String.Concat(ConvertDigit(tmpstr) + "萬", rstr);
tmpstr = str.Substring(0, strlen - 8);
rstr = String.Concat(ConvertDigit(tmpstr) + "億", rstr);
rstr = rstr.Replace("零億", "億");
rstr = rstr.Replace("零萬", "零");
rstr = rstr.Replace("零零", "零");
rstr = rstr.Replace("零零", "零");
}
}
strlen = rstr.Length;
if (strlen >= 2)
...{
switch (rstr.Substring(strlen - 2, 2))
...{
case "佰零": rstr = rstr.Substring(0, strlen - 2) + "佰"; break;
case "仟零": rstr = rstr.Substring(0, strlen - 2) + "仟"; break;
case "萬零": rstr = rstr.Substring(0, strlen - 2) + "萬"; break;
case "億零": rstr = rstr.Substring(0, strlen - 2) + "億"; break;
}
}
return rstr;
}
/**//// <summary>
/// 转换数字(小数部分)
/// </summary>
/// <param name="str">需要转换的小数部分数字字符串</param>
/// <returns>转换成中文大写后的字符串</returns>
public string ConvertXiaoShu(string str)
...{
int strlen = str.Length;
string rstr;
if (strlen == 1)
...{
rstr = ConvertChinese(str) + "角";
return rstr;
}
else
...{
string tmpstr = str.Substring(0, 1);
rstr = ConvertChinese(tmpstr) + "角";
tmpstr = str.Substring(1, 1);
rstr += ConvertChinese(tmpstr) + "分";
rstr = rstr.Replace("零分", "");
rstr = rstr.Replace("零角", "");
return rstr;
}
}
/**//// <summary>
/// 转换数字
/// </summary>
/// <param name="str">转换的字符串(四位以内)</param>
/// <returns></returns>
public string ConvertDigit(string str)
...{
int strlen = str.Length;
string rstr = "";
switch (strlen)
...{
case 1: rstr = ConvertChinese(str); break;
case 2: rstr = Convert2Digit(str); break;
case 3: rstr = Convert3Digit(str); break;
case 4: rstr = Convert4Digit(str); break;
}
rstr = rstr.Replace("拾零", "拾");
strlen = rstr.Length;
return rstr;
}
/**//// <summary>
/// 转换四位数字
/// </summary>
public string Convert4Digit(string str)
...{
string str1 = str.Substring(0, 1);
string str2 = str.Substring(1, 1);
string str3 = str.Substring(2, 1);
string str4 = str.Substring(3, 1);
string rstring = "";
rstring += ConvertChinese(str1) + "仟";
rstring += ConvertChinese(str2) + "佰";
rstring += ConvertChinese(str3) + "拾";
rstring += ConvertChinese(str4);
rstring = rstring.Replace("零仟", "零");
rstring = rstring.Replace("零佰", "零");
rstring = rstring.Replace("零拾", "零");
rstring = rstring.Replace("零零", "零");
rstring = rstring.Replace("零零", "零");
rstring = rstring.Replace("零零", "零");
return rstring;
}
/**//// <summary>
/// 转换三位数字
/// </summary>
public string Convert3Digit(string str)
...{
string str1 = str.Substring(0, 1);
string str2 = str.Substring(1, 1);
string str3 = str.Substring(2, 1);
string rstring = "";
rstring += ConvertChinese(str1) + "佰";
rstring += ConvertChinese(str2) + "拾";
rstring += ConvertChinese(str3);
rstring = rstring.Replace("零佰", "零");
rstring = rstring.Replace("零拾", "零");
rstring = rstring.Replace("零零", "零");
rstring = rstring.Replace("零零", "零");
return rstring;
}
/**//// <summary>
/// 转换二位数字
/// </summary>
public string Convert2Digit(string str)
...{
string str1 = str.Substring(0, 1);
string str2 = str.Substring(1, 1);
string rstring = "";
rstring += ConvertChinese(str1) + "拾";
rstring += ConvertChinese(str2);
rstring = rstring.Replace("零拾", "零");
rstring = rstring.Replace("零零", "零");
return rstring;
}
/**//// <summary>
/// 将一位数字转换成中文大写数字
/// </summary>
public string ConvertChinese(string str)
...{
//"零壹贰叁肆伍陆柒捌玖拾佰仟萬億圆整角分"
string cstr = "";
switch (str)
...{
case "0": cstr = "零"; break;
case "1": cstr = "壹"; break;
case "2": cstr = "贰"; break;
case "3": cstr = "叁"; break;
case "4": cstr = "肆"; break;
case "5": cstr = "伍"; break;
case "6": cstr = "陆"; break;
case "7": cstr = "柒"; break;
case "8": cstr = "捌"; break;
case "9": cstr = "玖"; break;
}
return (cstr);
}
#endregion
下面是前端转大写:
<script language="javascript" type="text/javascript">
function convertCurrency(currencyDigits) ...{
// Constants:
var MAXIMUM_NUMBER = 99999999999.99;
// Predefine the radix characters and currency symbols for output:
var CN_ZERO = "零";
var CN_ONE = "壹";
var CN_TWO = "贰";
var CN_THREE = "叁";
var CN_FOUR = "肆";
var CN_FIVE = "伍";
var CN_SIX = "陆";
var CN_SEVEN = "柒";
var CN_EIGHT = "捌";
var CN_NINE = "玖";
var CN_TEN = "拾";
var CN_HUNDRED = "佰";
var CN_THOUSAND = "仟";
var CN_TEN_THOUSAND = "万";
var CN_HUNDRED_MILLION = "亿";
var CN_SYMBOL = "人民币";
var CN_DOLLAR = "元";
var CN_TEN_CENT = "角";
var CN_CENT = "分";
var CN_INTEGER = "整";
// Variables:
var integral; // Represent integral part of digit number.
var decimal; // Represent decimal part of digit number.
var outputCharacters; // The output result.
var parts;
var digits, radices, bigRadices, decimals;
var zeroCount;
var i, p, d;
var quotient, modulus;
// Validate input string:
currencyDigits = currencyDigits.toString();
if (currencyDigits == "") ...{
alert("Empty input!");
return "";
}
if (currencyDigits.match(/[^,.d]/) != null) ...{
alert("Invalid characters in the input string!");
return "";
}
if ((currencyDigits).match(/^((d...{1,3}(,d...{3})*(.((d...{3},)*d...{1,3}))?)|(d+(.d+)?))$/) == null) ...{
alert("Illegal format of digit number!");
return "";
}
// Normalize the format of input digits:
currencyDigits = currencyDigits.replace(/,/g, ""); // Remove comma delimiters.
currencyDigits = currencyDigits.replace(/^0+/, ""); // Trim zeros at the beginning.
// Assert the number is not greater than the maximum number.
if (Number(currencyDigits) > MAXIMUM_NUMBER) ...{
alert("Too large a number to convert!");
return "";
}
// Process the coversion from currency digits to characters:
// Separate integral and decimal parts before processing coversion:
parts = currencyDigits.split(".");
if (parts.length > 1) ...{
integral = parts[0];
decimal = parts[1];
// Cut down redundant decimal digits that are after the second.
decimal = decimal.substr(0, 2);
}
else ...{
integral = parts[0];
decimal = "";
}
// Prepare the characters corresponding to the digits:
digits = new Array(CN_ZERO, CN_ONE, CN_TWO, CN_THREE, CN_FOUR, CN_FIVE, CN_SIX, CN_SEVEN, CN_EIGHT, CN_NINE);
radices = new Array("", CN_TEN, CN_HUNDRED, CN_THOUSAND);
bigRadices = new Array("", CN_TEN_THOUSAND, CN_HUNDRED_MILLION);
decimals = new Array(CN_TEN_CENT, CN_CENT);
// Start processing:
outputCharacters = "";
// Process integral part if it is larger than 0:
if (Number(integral) > 0) ...{
zeroCount = 0;
for (i = 0; i < integral.length; i++) ...{
p = integral.length - i - 1;
d = integral.substr(i, 1);
quotient = p / 4;
modulus = p % 4;
if (d == "0") ...{
zeroCount++;
}
else ...{
if (zeroCount > 0)...{
outputCharacters += digits[0];
}
zeroCount = 0;
outputCharacters += digits[Number(d)] + radices[modulus];
}
if (modulus == 0 && zeroCount < 4) ...{
outputCharacters += bigRadices[quotient];
}
}
outputCharacters += CN_DOLLAR;
}
// Process decimal part if there is:
if (decimal != "") ...{
for (i = 0; i < decimal.length; i++) ...{
d = decimal.substr(i, 1);
if (d != "0") ...{
outputCharacters += digits[Number(d)] + decimals[i];
}
}
}
// Confirm and return the final output string:
if (outputCharacters == "") ...{
outputCharacters = CN_ZERO + CN_DOLLAR;
}
if (decimal == "") ...{
outputCharacters += CN_INTEGER;
}
outputCharacters = CN_SYMBOL + outputCharacters;
return outputCharacters;
}
</script>
<p>数字金额: <input id="Digits" name="Digits" /> <input id="Convert" onclick="Result.value = convertCurrency(Digits.value);" type="button" name="Convert" value="转 换" /> </p>
<p>大写金额: <input id="Result" size="60" name="Result" /> </p>
下面是转成英文显示
public string GetEnglishNumber(decimal ade_number)
...{
string returnvalue=string.Empty;
if(ade_number<=0) return returnvalue;
string[] ls_eng_num1 = new string[19]...{ "ONE", "TWO", "THREE", "FOUR", "FIVE","SIX", "SEVEN", "EIGHT", "NINE", "TEN", "ELEVEN", "TWELVE","THIRTEEN", "FOURTEEN", "FIFTEEN", "SIXTEEN", "SEVENTEEN","EIGHTEEN", "NINETEEN" };
string[] ls_eng_num2 = new string[8]...{ "TWENTY", "THIRTY", "FORTY", "FIFTY","SIXTY", "SEVENTY", "EIGHTY", "NINETY"
};
string[] ls_eng_num3 = new string[4]...{ "HUNDRED", "THOUSAND", "MILLION", "BILLION" };
bool lb_isvalue = false;
decimal lde_num_t= (Math.Round(ade_number*100,0))%100;//小数点前两位的数字
小数点前2位#region 小数点前2位
if(lde_num_t>0)
...{
if(lde_num_t==20)
...{
returnvalue=ls_eng_num2[0]+" CENTS";
}
else if(lde_num_t<20)
...{
returnvalue = ls_eng_num1[Convert.ToInt32( lde_num_t-1 )];
if(lde_num_t==1)
returnvalue=returnvalue+" CENT";
else
returnvalue=returnvalue+" CENTS";
}
else if(lde_num_t>20)
...{
if((lde_num_t%10)>0)
returnvalue=ls_eng_num1[Convert.ToInt32(lde_num_t%10-1)];
returnvalue=ls_eng_num2[Convert.ToInt32((lde_num_t/10)-1)]+" "+returnvalue+" CENTS";
}
}
#endregion
十位/个位数#region 十位/个位数
ade_number = Decimal.Truncate(ade_number);
if(ade_number>0 && lde_num_t!=0)
returnvalue = " AND "+returnvalue;
lde_num_t=ade_number%100; //个位跟十位的数字
if(lde_num_t>0)
...{
if(lde_num_t==20)
...{
returnvalue = ls_eng_num2[0]+" "+returnvalue;
}
else if(lde_num_t<20)
...{
returnvalue = ls_eng_num1[Convert.ToInt32(lde_num_t-1)]+" "+returnvalue;
}
else if(lde_num_t>20)
...{
if(lde_num_t%10>0)
returnvalue = ls_eng_num1[Convert.ToInt32(lde_num_t%10-1)]+" "+returnvalue;
returnvalue = ls_eng_num2[Convert.ToInt32(lde_num_t/10)-1]+" "+returnvalue;
}
}
#endregion
ade_number = ade_number/100;
if(ade_number>0)
...{
百位数#region 百位数
#endregion
千位~十万#region 千位~十万
#endregion
百万~十亿#region 百万~十亿
#endregion
百亿~十兆#region 百亿~十兆
#endregion
}
return returnvalue;
}
相关文章推荐
- java代码中将金额阿拉伯数字转化为中文大写
- 2012向全国人民拜年了!!![阿拉伯数字转中文大写-金额]
- C#实现的【阿拉伯数字转换成中文大写金额】
- 人民币金额中数字格式转化为中文的人民币大写格式的全部代码
- 用java代码将阿拉伯数字金额转换成中文大写
- 报表上金额由阿拉伯数字转换成中文大写
- 阿拉伯数字金额转换成中文大写(转)
- C#实现阿拉伯数字(小写金额)到大写中文(大写金额)的转换
- VB阿拉伯数字金额转大写中文
- 超级简单的大写金额转换--阿拉伯数字转中文大写
- 把阿拉伯数字的金额转换为中文大写数字
- 阿拉伯数字小写金额转换成中文大写金额C程序说明
- 阿拉伯数字金额转中文大写 (python实现)
- 阿拉伯数字小写金额转换成中文大写金C额程序说明
- 金额由阿拉伯数字转换成中文大写[修改版]
- php 阿拉伯数字转中文大写金额
- 报表上金额由阿拉伯数字转换成中文大写
- android 金额输入验证(阿拉伯数字转换中文大写)
- C# 阿拉伯数字转中文大写,阿拉伯数字转金额
- C#实现的【阿拉伯数字转换成中文大写金额】代码(原创)