`

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

 

分享到:
评论

相关推荐

    javascript 小写金额转化成大写

    在IT行业中,尤其是在财务系统和电子商务领域,将小写金额转换为大写是常见的需求,因为大写金额在正式的财务凭证中使用,可以避免因数字混淆而引起的错误。JavaScript作为一种广泛使用的前端脚本语言,提供了丰富的...

    JS将数字转换为大写汉字人民币

    JS将数字转换为大写汉字人民币

    JS实现人民币小写转大写

    在JavaScript编程中,有时我们需要将人民币的数字金额(小写)转换为中文的大写形式,以便于财务报表或发票的规范书写。这个过程涉及到字符映射、数字处理以及字符串操作等多个知识点。以下是对这个主题的详细说明:...

    JS实现将人民币金额转换为大写的示例代码

    综上所述,这段代码充分展示了如何将一个浮点数的人民币金额转换为规范的大写金额表示,包括了金额的整数部分和小数部分。这是编程人员在处理财务相关软件或系统时必须掌握的技能之一。 需要注意的是,上述示例代码...

    js金额数字规范 大写金额 保留2位数字 js货币格式 规范

    本文将深入探讨如何使用JavaScript来实现金额数字的大写转换、保留两位小数以及遵循货币格式规范。 一、金额数字规范 在金融领域,金额通常需要遵循特定的规范,例如,数值部分应精确到小数点后几位,以及在表示...

    JS实现将数字金额转换为大写人民币汉字的方法

    本文介绍了一个具体的案例:使用JavaScript语言将数字金额转换为大写人民币汉字的方法。这个方法涉及到JavaScript中的字符串操作、数组操作、逻辑判断等编程技巧。 首先,我们来了解数字金额转大写的基本概念。在...

    js实现人民币大写金额形式转换

    本文将详细介绍如何使用JavaScript(简称js)来实现人民币金额的数字形式向大写形式的转换,并提供一个具体的代码实现。 首先,我们需要定义两个字符串变量`str1`和`str2`。`str1`包含数字0-9对应的汉字表示,`str2...

    人民币转换为大写包含负数

    在编程中,将人民币小写转换为大写,一般涉及以下步骤: 1. **整数部分的转换**:将整数部分的每一位数字对应到相应的汉字。例如,0对应零,1对应壹,以此类推至9对应玖。这个过程可以通过创建一个映射表来实现,将...

    js数字转换成大写

    ### JavaScript 数字转大写人民币金额函数解析 在日常开发工作中,经常需要处理财务相关的数据,比如将数字转换为大写人民币金额格式。这在发票、合同等正式文档中非常常见。下面我们就来详细分析一下如何用...

    网页模板——原生JS实现的人民币数字大写转换特效源码.zip

    4. **处理零的规则**:在人民币金额转换中,零的处理相当重要,例如“零元”、“零角”、“零分”。JavaScript代码需要根据特定的规则来决定何时添加“零”字。 5. **金额格式化**:将数字分为整数部分和小数部分,...

    人民币大写转换js,精确到角

    JavaScript函数的目标是将阿拉伯数字形式的金额转换成这些中文大写表示。 在描述中提到,"如果直接转换不了,可以尝试把你传入的参数用.toString()方法转换一下"。这是因为JavaScript中的数字类型无法直接进行字符...

    人民币大写转换

    在描述中提到的“人民币大写转换”是指将阿拉伯数字(如123456.78)转化为汉字大写(如壹拾贰万叁仟肆佰伍拾陆元柒角捌分)。这个过程涉及到一系列的规则和映射,因为每个数字都需要对应特定的汉字表示。 1. **基本...

    货币大写金额转换插件ChinaNumToEnglishNum.js

    《JavaScript实现货币大写金额转换:ChinaNumToEnglishNum.js详解》 在信息化时代,处理财务数据时,尤其是在中国的金融环境中,将阿拉伯数字转换为中文大写是必不可少的环节,因为中文大写在金融交易中可以避免...

    用Jscript编写的人民币小写转大写代码。

    本文将深入探讨一个基于JScript(JavaScript的一种变体)的实用功能——将人民币小写金额转换为大写。这个功能对于财务系统、电子商务平台等涉及到货币显示的场景尤其有用,它能够确保金额的格式正确,增加信息的...

    人民币数字转大写金额.rar

    在IT行业中,尤其是在财务软件开发或者电子商务应用中,经常需要将数字金额转换成大写的汉字表示,以便于会计记录和防止篡改。本项目“人民币数字转大写金额”正致力于解决这一问题,通过JavaScript库jQuery实现这一...

    JS人民币转换大小写人民币大小写转换

    在JavaScript(JS)编程中,有时我们需要将数字格式的人民币金额转换为中文大写的表示方式,这在财务系统或者电商平台上十分常见。人民币大写转换主要用于财务报表、发票和银行单据,确保金额的准确性和规范化。下面...

    数字大写的flex实现

    在IT行业中,尤其是在软件开发领域,经常会遇到将阿拉伯数字转换为中文大写的场景,这在财务、会计系统中尤其常见,因为中文大写可以避免数字混淆,提高账目的准确性。Flex是一款基于ActionScript的开源框架,用于...

Global site tag (gtag.js) - Google Analytics