js 实现人民币大写转换

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="gb2312"> 
 <head> 
 <title>将人民币数字转换成大写形式</title> 
 <script language="jscript"> 
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> 
 </head> 
 <body> 
 <input id="Digits" type="text" name="Digits" size="20" /> 
 <input id="Convert" type="button" value="Convert" name="Convert" οnclick="Result.value = convertCurrency(Digits.value);" /> 
 <input id="Result" type="text" name="Result" size="60" /> 
</body> 
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值