`

用JS将人民币金额转换成大写

    博客分类:
  • JS
阅读更多

今天弄了个将数字转换成大写显示的功能,这里记录下,以备不时之需。

形式:收款单据

用的Jquery包版本:jquery-1.4.2

 

以下是代码:

页面布局:

<body>	
<div class="page" id="page">
   <ul class="foti">
    <li>姓&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;名:
      <input type="text"  class="foinput" value="张三"/>
    </li>
    <li>支付方式:
      <input type="text"  class="foinput" value="现金"/>
    </li>
    <li>房&nbsp;间&nbsp;号&nbsp;:
      <input type="text"  class="foinput" value="405"/>
    </li>
    <li>收款日期:
      <input type="text"  class="foinput" value="2015-3-30"/>
    </li>
   </ul>
  
<div class="box">
   <ul class="boxul">
      <li>床位费(元):<input type="text"  class="boxinput" disabled="disabled" value="111.11"/></li>
      <li>餐费(元):<input type="text"  class="boxinput" disabled="disabled" value="222.22"/></li>
      <li>电费(元):<input type="text"  class="boxinput" disabled="disabled" value="333.33"/></li>
      <li>暖气费(元):<input type="text"  class="boxinput" disabled="disabled" value="444.44"/></li>
      <li>其他(元):<input type="text" class="boxinput" disabled="disabled" value="555.55"/></li>
</ul>
<div class="clear"></div>
<div class="hj" style="margin-top:10px;" >
合计(元):
<input type="text" class="hjinput" disabled="disabled" value="1666.65" id="total" />
</div>
<div class="clear"></div>
<div class="hj" style="width:100%" >
合计(大写人民币):
<input type="text" class="hjinput"  style="width:70%;" disabled="disabled" value=""  id="totalToUpper"/>
</div>
<div class="clear"></div>
</div>
    <ul class="foti" style="height:40px;">
    <li>收&nbsp;款&nbsp;人&nbsp;:<input type="text"  class="foinput"/></li>
    <li>交&nbsp;款&nbsp;人&nbsp;:<input type="text"  class="foinput"/></li>
  </ul>
</body>

 CSS样式:

<style type="text/css">
* { padding:0; margin:0; }
body { font-family: Arial, Helvetica, sans-serif, "宋体"; color:#333; font-size:12px; line-height:20px; }
.clear { clear:both; }
img { border:none; }
a { text-decoration:none; color:#333; }
a:hover { color:#FF5500; text-decoration:underline; }
ul li { list-style-type:none; overflow:hidden; white-space:nowrap; -o-text-overflow:ellipsis; text-overflow:ellipsis; }
table { border-collapse:collapse; border-spacing:0px; border:none; }
h1, h2, h3, h4, h5 { font-size:14px; font-family: Arial, Helvetica, sans-serif, "宋体"; }
h3, h4, h5 { font-size:12px; }
.page { width:754px;   border:1px solid #ccc; margin: 0 auto; padding:10px 20px; }
.page h2 { width:100%; text-align:center; font-size:18px; font-weight:normal; color:#000; }
.page h3 { width:100%; text-align:center; font-size:14px; font-weight:normal; color:#000;  }
.page .foti { width:670px; height:65px; margin: 0 auto; margin-top:5px;font-size:14px}
.page ul li { width:220px; height:28px; float:left; }
.page ul li .hjinput{width:30px; border:0px; text-align:center; border-bottom:1px solid #000;}
.page ul li input { border:0px; border-bottom:1px solid #000; height:25px; font-size:14px; line-height:25px;}
.page .box{ width:660px; height:160px;  border:1px solid #000; margin: 5px auto; font-size:14px; padding:5px;  }
.box .boxul{ width:670px;  }
.box .boxul li{ width:210px; float:left; height:35px;}
.box .boxul .boxinput{ width:100px; border:0px; background:none; font-size:14px; height:25px; line-height:25px;}
.hj{width:238px; height:25px;  }
.hj .hjinput{width:100px; border:0px;background:none;font-size:14px}
.yj{width:238px; height:36px; float:left }
.yj .hjinput{width:30px; border:0px; text-align:center; border-bottom:1px solid #000;}
#print{ text-align:right;}
.but_1 { width:102px; height:28px; line-height:28px; margin-bottom: 3px; border:0px; background:#006e57; color: #fff; cursor:pointer; font-size:14px; }
</style>

 JS:

<script type="text/javascript">
	$(function(){
		//计算合计
		var total=0;
		$(".boxinput").each(function(){
			total=total+parseFloat($(this).val());
		});
		total = total.toFixed(2);//保留两位小数
		
		$("#total").val(total);//赋值
		var totalToUpper=amountToChinese(total);//将小写数字转换成大写
		$("#totalToUpper").val(totalToUpper);//赋值
	});

function amountToChinese(p_amount) {
	p_amount=""+p_amount;
	var p_array = new Array();
	var mo_array = new Array("","\u4e07","\u4ebf");
	var tmpNumber = 0, i = 0;
	var dollar = "", cent = "", transNumber = "";
	if (isNaN(p_amount)) return ""; //如果不是数字则直接返回空字符串
	if ((""+p_amount).substring(0,1)=="-") return ""; //如果是负值也不予处理直接返回
	p_array = p_amount.split(".");
	if (p_array.length == 2) { //有小数部分
		if (p_array[1].length > 2) p_array[1]=p_array[1].substring(0,2); //小数部分超过三位,不予转换
		tmpNumber = parseInt(p_array[1]);
		if (tmpNumber != "0") {
			if (p_array[1].length == 1) tmpNumber = tmpNumber * 10;
			
			cent += amountToChineseSimpleNumber(parseInt(tmpNumber/10), "\u89d2"); //角
			cent += amountToChineseSimpleNumber(tmpNumber % 10, "\u5206"); //分
			if (cent.substr(cent.length-1,1)=="\u96f6") { //去末尾的零
				cent = cent.substr(0,cent.length-1);
			}
		}
	}
	transNumber = p_array[0];
	p_array.length = 0;
	if (parseInt(transNumber)>0) {
		do {
			if (transNumber.length<5) {
				p_array[i++] = transNumber;
				transNumber = "";
			} else {
				p_array[i++] = transNumber.substr(transNumber.length-4,4);
				transNumber = transNumber.substr(0,transNumber.length-4);
			}
		} while (transNumber.length>0);
	}
	i = 0;
	for (i=0;i<p_array.length;i++) {
		dollar = transFourBit(p_array[i],mo_array[i]) + dollar;
	}
	dollar = fixedNumber(dollar);
	if (dollar.length==0) {
		transNumber = cent;
	} else {
		transNumber = dollar + "\u5143" + cent;
	}
	
	transNumber += "\u6574";
	return transNumber.replace(/^\u96f6/,"");
}

/*数字转中文*/
function amountToChineseSimpleNumber(n,m) {
	var simpleNumber = new Array("\u96f6","\u58f9","\u8d30","\u53c1","\u8086","\u4f0d","\u9646","\u67d2","\u634c","\u7396");
	var aNumber = parseInt(n);
	
	if (aNumber==0) {
		return "\u96f6"+m;
	} else {
		return simpleNumber[aNumber]+m;
	}
}

function transFourBit(n,m) {
	var tmpNumber = "";
	var aTmp = 0;
	var resultChar = "";
	var ttlLength = 0;
	aTmp = parseInt(parseFloat(n));
	tmpNumber = aTmp + ""; //去除前导零
	tmpNumber=n;
 	ttlLength = tmpNumber.length;
	if (ttlLength>3) {
		resultChar = amountToChineseSimpleNumber(tmpNumber.substr(0,1),"\u4edf"); //千
		tmpNumber = tmpNumber.substr(1,3);
	}
	if (ttlLength>2) {
		resultChar += amountToChineseSimpleNumber(tmpNumber.substr(0,1),"\u4f70"); //百
		tmpNumber = tmpNumber.substr(1,2);
	}
	if (ttlLength>1) {
		resultChar += amountToChineseSimpleNumber(tmpNumber.substr(0,1),"\u62fe"); //十
		tmpNumber = tmpNumber.substr(1,1);
	}
	resultChar += amountToChineseSimpleNumber(tmpNumber.substr(0,1),""); //个位
	if (ttlLength<4) resultChar = "\u96f6" + resultChar;
	resultChar = fixedNumber(resultChar);
	if (resultChar == "") { //如果什么都没有剩下,则直接返回零
		return "\u96f6"+m;
	} else {
		return resultChar + m;
	}
}

function fixedNumber(n) {

	var a = "";
	a = n;
	// 先去除连续重复的零
	do {
		n = a;
		a = n.replace("\u96f6\u96f6","\u96f6");
	} while (n!=a);
	
	//再去除结尾的零
	n = n.replace(/\u96f6$/,"");
	return n;
}
</script>

 

 上面的方法对于一般数据处理起来没有问题,但对于特殊数据转换起来可能会出问题,这是在网上找的另外一篇,经测试没有问题。原文链接:http://www.3lian.com/edu/2014/09-23/167471.html

function changeNumMoneyToChinese(money) {
  var cnNums = new Array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"); //汉字的数字
  var cnIntRadice = new Array("", "拾", "佰", "仟"); //基本单位
  var cnIntUnits = new Array("", "万", "亿", "兆"); //对应整数部分扩展单位
  var cnDecUnits = new Array("角", "分", "毫", "厘"); //对应小数部分单位
  var cnInteger = "整"; //整数金额时后面跟的字符
  var cnIntLast = "元"; //整型完以后的单位
  var maxNum = 999999999999999.9999; //最大处理的数字
  var IntegerNum; //金额整数部分
  var DecimalNum; //金额小数部分
  var ChineseStr = ""; //输出的中文金额字符串
  var parts; //分离金额后用的数组,预定义
  if (money == "") {
  return "";
  }
  money = parseFloat(money);
  if (money >= maxNum) {
  alert('超出最大处理数字');
  return "";
  }
  if (money == 0) {
  ChineseStr = cnNums[0] + cnIntLast + cnInteger;
  return ChineseStr;
  }
  money = money.toString(); //转换为字符串
  if (money.indexOf(".") == -1) {
  IntegerNum = money;
  DecimalNum = '';
  } else {
  parts = money.split(".");
  IntegerNum = parts[0];
  DecimalNum = parts[1].substr(0, 4);
  }
  if (parseInt(IntegerNum, 10) > 0) { //获取整型部分转换
  var zeroCount = 0;
  var IntLen = IntegerNum.length;
  for (var i = 0; i < IntLen; i++) {
  var n = IntegerNum.substr(i, 1);
  var p = IntLen - i - 1;
  var q = p / 4;
  var m = p % 4;
  if (n == "0") {
  zeroCount++;
  } else {
  if (zeroCount > 0) {
  ChineseStr += cnNums[0];
  }
  zeroCount = 0; //归零
  ChineseStr += cnNums[parseInt(n)] + cnIntRadice[m];
  }
  if (m == 0 && zeroCount < 4) {
  ChineseStr += cnIntUnits[q];
  }
  }
  ChineseStr += cnIntLast;
  //整型部分处理完毕
  }
  if (DecimalNum != '') { //小数部分
  var decLen = DecimalNum.length;
  for (var i = 0; i < decLen; i++) {
  var n = DecimalNum.substr(i, 1);
  if (n != '0') {
  ChineseStr += cnNums[Number(n)] + cnDecUnits[i];
  }
  }
  }
  if (ChineseStr == '') {
  ChineseStr += cnNums[0] + cnIntLast + cnInteger;
  } else if (DecimalNum == '') {
  ChineseStr += cnInteger;
  }
  return ChineseStr;
}
 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics