Javascript 人民币数字转换成大写
2008-04-14 11:15 | 分类 WebDev | By ming | 发表评论 »
前些天刚好用到,在网上搜出来就那么一个,看起来比较乱,所以干脆自已写一个。主要是利用数组来完成(刚好那么多个元素)。
<html>
<body>
人民币数值:<input type='text' id='fchars' />
<input type='button' id='fsubmit' value='转换' />
<hr />
结果:<div id='fresult'></div>
<script type='text/javascript'>
var $ = function(id) {
return document.getElementById(id);
};
$('fsubmit').onclick = function() {
$('fresult').innerHTML = new rmbConverter().transToUpper($('fchars').value);
};
var rmbConverter = function() {
};
rmbConverter.prototype = {
upperChars: ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'],
/*数组刚好10个元素,下标从0到9,那么数字0-9刚好对应upperChars[0-9]*/
upperUnits: ['', '拾', '佰', '仟', '萬', '亿'],
/*转换四位数*/
transThousand: function(floatStr) {
var tdata = {
result: parseInt(floatStr) > 0,/*是否全为零*/
data: [],
bZero: false/*低位全为零*/
};
if (tdata.result) {
/*从高位开始取*/
for (var l = floatStr.length, i = l - 1; i >= 0; i--) {
var notZero = floatStr.charAt(i) > 0;
if (notZero) {
tdata.data.push(this.upperChars[floatStr.charAt(i)]);
tdata.data.push(this.upperUnits[i]);
} else {
if (parseInt(floatStr.substr(0, i + 1)) == 0) {
tdata.bZero = true;
continue;
}
tdata.data.push(this.upperChars[0]);
}
}
tdata.data = tdata.data.join('').replace(/[\u96F6]+/g,'\u96F6');
/*对可能出现的多个相连的零更换成单个*/
}
return tdata;
},
transLeft: function(floatStr) {/*转换整数部分*/
var result = [];
floatStr = floatStr.split('').reverse().join('');/*反转字符串*/
for (var l = floatStr.length, i = 0; i < l; i += 4) {
/*每次取四个转换*/
var tdata = this.transThousand(floatStr.substr(i, 4));
if (tdata.result) {
if (tdata.bZero)
result.unshift(this.upperChars[0]);//补全低位的零
if (i == 4)
result.unshift(this.upperUnits[4]);
else if (i == 8)
result.unshift(this.upperUnits[5]);
result.unshift(tdata.data);
}
}
return result.join('').replace(/[\u96F6]+/g,'\u96F6');
},
transToUpper: function(floatStr) {
var result = [];
var floatArr = ('' + floatStr).split('.');//把人民币分割成两部分:整数、小数
if (floatArr.length > 1) {
for (var i = 0, l = floatArr[1].length; i < l && i < 2; i++) {/*只保留两位小数*/
result.unshift(this.upperChars[floatArr[1].charAt(i)]);
}
result.push(' 点 ');/*整数、小数之间分隔符*/
}
result.push(this.transLeft(floatArr[0]));
return result.reverse().join('');
}
};
</script>
</body></html>
使用 var converter = new rmbConverter();
converter.transToUpper(123456789.012);
结果:"壹亿贰仟叁佰肆拾伍萬陆仟柒佰捌拾玖 点 零壹"
转载请遵循"署名-非商业性使用-相同方式共享" 的创作共用协议。
留下评论
(如发言后未显示则有待审核)

