金额大写转换
金额大写转化
Js代码:
/*
人民币大写金额规则
(一) 阿拉伯数字中间有“0”时,中文大写金额中间可以只写一个“零”字。
如,1,409.50,应写成人民币壹仟肆佰零玖元伍角。
(二) 阿拉伯数字中间连续有几个“0”,中文大写金额中间可以只写一个“零”字, 如,6,007.14,应写成人民币陆仟零柒元壹角肆分。
(三) 阿拉伯金额数字万位或元位是“0”,或者数字中间连续有几个“0”,
万位、元位也是“0”,但仟位、角位不是“0”时,中文大写金额中可以只写一个零字, 也可以不写“零”字,如,1,680.32,应写成人民币壹仟陆佰捌拾元零三角贰分, 或者写成人民币壹仟陆佰捌拾元三角贰分; 又如,107,000.53,应写成人民币壹拾万柒仟元零伍角叁分,或者写成人民币壹拾万柒仟元伍角叁分。
(四) 阿拉伯金额数字角位是“0”,而分位不是“0”时,中文大写金额“元”后面应写“零”字。
如,16,409.02,应写成人民币壹万陆仟肆佰零玖元零贰分; 又如,325.04,应写成人民币叁佰贰拾元零肆分。
根据《中华人民共和国票据法》的相关规定:
填写票据和结算凭证,必须做到
化、
化,
要素齐全、数字正确、字迹清晰、不错漏、不潦草,防止涂改。
1、中文大写金额数字如零、壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿等,
应用正楷或行
填写,不得自造简化字。如果金额数字书写中使用繁体字,也应受理(针对银行方)。
2、中文大写金额数字到“元”为止的,在“元”之后,应写“整”(或“正”)字,
在“角”之后可以不写“整”(或“正”)字。大写金额数字有“分”的,“分”后面不写“整”(或“正”)字。
3、中文大写在写一般票据和银行支票是不一样的。
一般票据的写法上面的 上一部分 已经写得很清楚了,
*/
// 预定义汉字与对应单位
var zwsz = new Array("", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖");
var xsdw = new Array("分", "角"); //小数部分单位
var zsdw = new Array("元", "拾", "佰", "仟", "万", "拾", "佰", "仟",
"亿", "拾", "佰", "仟", "万
"); //整数部分单位
var ling = 0;// 数字中连续的0出现的次数
银行支票得写法就得把零全写上,不管0在什么位置,要写成零元零角零分。
replaceAll
// 预定义
String.prototype.replaceAll = function(s1,s2){
return this.replace(new RegExp(s1,"gm"),s2);
}
//数字小写转换成大写 精确到万元
function transformWy(val){
}
//数字小写转换成大写 精确到元
function transformY(zsbf){
//转换整数部分
var zsbf_str=""; var len = zsbf.length; //alert("zsbf::"+zsbf);
for(var i=0; i<len; i++){ var num_N = zsbf.charAt(i); //一般数字 var num_C = num_C = zwsz[num_N]; //中文数字 var num_dw = ""; // 只有当前数字非零时,拼上对应的单位 if(num_N !=
0){ //alert("len=="+len+"--i=="+i); num_dw =
zsdw[len-i-1]; //对应单位 }else{ ling += 1; } //alert("数字
=="+num_N+",中文==="+num_C+",单位是:
"+num_dw); //alert("num_C=="+num_C); // 尾数不为0 var ws =
zsbf.substr(i,len); //alert("ws=="+ws); if(ws != 0){ if(num_N !=
0){ //alert("尾数=="+ws+",当前数=="+num_N+",已经产生汉字=="+zsbf_str+",ling=="+ling);
// 如果高位出现过0 当前数字非零的时候,显示一个0,并且清空一次ling标
志位
if(ling > 0){ zsbf_str = zsbf_str + "零" + num_C +
num_dw; }else{ zsbf_str = zsbf_str + num_C + num_dw;
} } ling = 0; }else{ // 当前数字为0的
时候,需要判断是否该显示万,亿2个单位 if(ws.length == 5){ } // 当前数
字为0的时候,需要判断是否该显示万,亿2个单位 // 数字长度为5,8位的时
候预定义的单位带有万、亿,这里就不做处理了。 if( ws.length == 4 || ws.length == 8){ zsbf_str = zsbf_str + "元"; break; zsbf_str = zsbf_str + "万
" + num_C + num_dw; }else if(ws.length == 9){ } zsbf_str = zsbf_str +
"亿" + num_C + num_dw; }else{ }else{ if(ws.length > 4){ if(ws.length > 8){ } zsbf_str = zsbf_str + "亿元" + num_C + num_dw; break; }else if(ws.length < 8){ zsbf_str = zsbf_str + "万元" + num_C + num_dw; break; }else{ }
break; }else{ zsbf_str = zsbf_str + "元"; break; } } //alert("第
"+i+"次循环,结果=="+zsbf_str); return zsbf_str;
}
//数字小写转换成大写 小数部分转化 function transformXs(xsbf){
//转换小数部分
var strdig=""; if(xsbf!=""){ var n = xsbf.charAt(0);
} } if(n!=0){ strdig += zwsz[Number(n)]+"角
"; }else{ strdig += zwsz[Number(n)]; } var n = xsbf.charAt(1); if(n!=0){ } strdig += zwsz[Number(n)]+"分"; return strdig;
function varlNum(val){
}
//数字小写转换成大写 精确到元 function transform1(val){ var zsbf; //整数部
var xsbf; //小数部分 分
if(val.indexOf(".") == -1){ zsbf = val; xsbf = ""; }else{ zsbf = val.substr(0, val.indexOf(".")); } xsbf = val.substr(val.indexOf(".")+1, val.length); //alert("英文
=="+zsbf.indexOf(",")); //alert("半角
=="+zsbf.indexOf(",")); //alert("全角
=="+zsbf.indexOf(",")); // 替换逗号 英文
if(zsbf.indexOf(",")>-1){ } zsbf =
zsbf.replaceAll(",",""); // 替换逗号 半角
if(zsbf.indexOf(",")>-1){ zsbf = zsbf.replaceAll(",
",""); } // 替换逗号 全角 if(zsbf.indexOf(",
")>-1){ zsbf = zsbf.replaceAll(",",""); } // 数字处
理部分 END
// 整数部分处理 var zsbf_str = ""; zsbf_str = transformY(zsbf); //alert("main,zsbf=="+zsbf_str); if(zsbf != "" && xsbf==""){ } zsbf_str += "整"; // 整数部分处理 END //
小数部分处理 zsbf_str += transformXs(xsbf); // 小数部分处理 END // 标志位
复原 ling = 0; return zsbf_str;
}
/*
此方法是在承包商录入列
页面上打印施工证和准入证时使用的原来用的是
transform1方法,
但是因为陈红提出“注册资金为万元,可以把整字去掉”的要求所以进行的一些
相关修改。 数字小写转换成大写 精确到元*/
function transform2(val){
var zsbf; //整数部分
var xsbf; //小数部分
if(val.indexOf(".") == -1){ zsbf = val; xsbf = ""; }else{ zsbf = val.substr(0, val.indexOf(".")); xsbf =
val.substr(val.indexOf(".")+1, val.length); } //alert("英文
=="+zsbf.indexOf(",")); //alert("半角
=="+zsbf.indexOf(",")); //alert("全角
=="+zsbf.indexOf(",")); // 替换逗号 英文
if(zsbf.indexOf(",")>-1){ zsbf = zsbf.replaceAll(",",""); } // 替换逗号 半角
if(zsbf.indexOf(",")>-1){ zsbf = zsbf.replaceAll(",
",""); }
} // 替换逗号 全角 if(zsbf.indexOf(",")>-1){ zsbf =
",""); } // 数字处理部分 END // 整数zsbf.replaceAll(",
部分处理 var zsbf_str = ""; zsbf_str = transformY(zsbf);
//alert("main,zsbf=="+zsbf_str); /*------------------------------- 应陈红要求
做出的调整:将加整字的逻辑去掉。 if(zsbf != "" && xsbf==""){ zsbf_str += "整"; }*/ // 整数部分处理 END
// 小数部分处理 zsbf_str += transformXs(xsbf); // 小数部分处理 END // 标志
位复原 ling = 0; return zsbf_str;
HTML中的应用及说明:
//说明:引入js
<script language="javascript" src="<%=basePath%>xbgczj/js/transform.js"></script> 。。
。。。。
//说明:页面加载的时候执行转化方法
<body onload="fun_capital();">
。。。。。。
<tr>
<td class="header">合计</td>
<td class="row1_c"> </td> <td
class="row1_c"> <%=tempHJ %> <input
type="hidden" id="tempHJ" name="tempHJ"
value="<%=tempHJ %>" /> </td> </tr> 。。。。。。
。。。。。。 <tr> <td class="header">金
额大写:</td> <td class="form" colspan="3" id="sumCapital"> </td> </tr>
。。。。。。
</body>
<script language="JavaScript" type="text/javascript">
function fun_capital(){
document.getElementById("sumCapital").innerText=transform2((document.getElementById("tempHJ").value*10000).toString());
}
</script> //金额大写