您的位置:首页 > 其它

阿拉伯金额转中文大写及英文格式

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;


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: