试了下虽然原理简单,还挺麻烦的因为要使得结果可读化。。主要是不能出现零,还有整数和小数分和角的显示与不显示
原理就是获取个十百千万的数字,然后套一个数组咯<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<script src="http://lib.sinaapp.com/js/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript">
//小写转大写
function digit_uppercase(n) {
var fraction = ['角', '分'];
var digit = [
'零', '壹', '贰', '叁', '肆',
'伍', '陆', '柒', '捌', '玖'];
var unit = [
['元', '万', '亿'],
['', '拾', '佰', '仟']
];
var head = n < 0 ? '欠' : '';
n = Math.abs(n); var s = ''; for (var i = 0; i < fraction.length; i++) {
s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '');
}
s = s || '整';
n = Math.floor(n); for (var i = 0; i < unit[0].length && n > 0; i++) {
var p = '';
for (var j = 0; j < unit[1].length && n > 0; j++) {
p = digit[n % 10] + unit[1][j] + p;
n = Math.floor(n / 10);
}
s = p.replace(/(零.)*零$/, '')
.replace(/^$/, '零') + unit[0][i] + s;
}
return head + s.replace(/(零.)*零元/, '元')
.replace(/(零.)+/g, '零')
.replace(/^整$/, '零元整');
}
function change_money(currency){
_cn_result=digit_uppercase(currency)
$("#result").html(digit_uppercase(currency)); $("#wan").val(get_cn(currency,5)); $("#qian").val(get_cn(currency,4));
$("#bai").val(get_cn(currency,3));
$("#shi").val(get_cn(currency,2));
$("#yuan").val(get_cn(currency,1));
$("#jiao").val(get_cn(currency,-1));
$("#feng").val( get_cn(currency,-2)); }
function get_cn(_number,position){
if(position=='undefined')
{ alert("错误!参数!缺失!");
return }
var _digit = [
'', '壹', '贰', '叁', '肆',
'伍', '陆', '柒', '捌', '玖'];
_pat=/^-?[1-9]+$/g;
if(!_pat.test(position)){
alert("第二个参数有误!");
return
}
_number=Math.abs(_number);
if(_number>10000&&position>4)
return digit_uppercase(_number).split("万")[0];
//无小数位开始倒着取
if((_number+"").indexOf(".")==-1){
_arr=(_number+"").split("");
if(position<=0)return"";
return _digit[_arr[_arr.length-position]] }else{//有就要做出偏移,因为多出3位
_number=new Number(_number).toFixed(2);
_arr=(_number+"").split("");
return _digit[_arr[_arr.length-position-3]]
}
}
</script>
</head><body>
<p>
<label for="money">金额:</label>
<input type="text" name="money" onpropertychange=="javascript:change_money(this.value);" oninput="javascript:change_money(this.value);" id="money">
<span id="result"></span></p>
<p>
<input type="text" name="wan" id="wan">
<label for="wan">万 </label>
<input type="text" name="qian" id="qian">
<label for="qian">千</label>
<input type="text" name="bai" id="bai">
<label for="bai">百</label>
<input type="text" name="shi" id="shi">
<label for="shi">拾</label>
<input type="text" name="yuan" id="yuan">
<label for="shi">元</label>
<input type="text" name="jiao" id="jiao">
<label for="shi">角</label>
<input type="text" name="feng" id="feng">
<label for="shi">分</label>
</p>
</body>
</html>
原理就是获取个十百千万的数字,然后套一个数组咯<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<script src="http://lib.sinaapp.com/js/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript">
//小写转大写
function digit_uppercase(n) {
var fraction = ['角', '分'];
var digit = [
'零', '壹', '贰', '叁', '肆',
'伍', '陆', '柒', '捌', '玖'];
var unit = [
['元', '万', '亿'],
['', '拾', '佰', '仟']
];
var head = n < 0 ? '欠' : '';
n = Math.abs(n); var s = ''; for (var i = 0; i < fraction.length; i++) {
s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '');
}
s = s || '整';
n = Math.floor(n); for (var i = 0; i < unit[0].length && n > 0; i++) {
var p = '';
for (var j = 0; j < unit[1].length && n > 0; j++) {
p = digit[n % 10] + unit[1][j] + p;
n = Math.floor(n / 10);
}
s = p.replace(/(零.)*零$/, '')
.replace(/^$/, '零') + unit[0][i] + s;
}
return head + s.replace(/(零.)*零元/, '元')
.replace(/(零.)+/g, '零')
.replace(/^整$/, '零元整');
}
function change_money(currency){
_cn_result=digit_uppercase(currency)
$("#result").html(digit_uppercase(currency)); $("#wan").val(get_cn(currency,5)); $("#qian").val(get_cn(currency,4));
$("#bai").val(get_cn(currency,3));
$("#shi").val(get_cn(currency,2));
$("#yuan").val(get_cn(currency,1));
$("#jiao").val(get_cn(currency,-1));
$("#feng").val( get_cn(currency,-2)); }
function get_cn(_number,position){
if(position=='undefined')
{ alert("错误!参数!缺失!");
return }
var _digit = [
'', '壹', '贰', '叁', '肆',
'伍', '陆', '柒', '捌', '玖'];
_pat=/^-?[1-9]+$/g;
if(!_pat.test(position)){
alert("第二个参数有误!");
return
}
_number=Math.abs(_number);
if(_number>10000&&position>4)
return digit_uppercase(_number).split("万")[0];
//无小数位开始倒着取
if((_number+"").indexOf(".")==-1){
_arr=(_number+"").split("");
if(position<=0)return"";
return _digit[_arr[_arr.length-position]] }else{//有就要做出偏移,因为多出3位
_number=new Number(_number).toFixed(2);
_arr=(_number+"").split("");
return _digit[_arr[_arr.length-position-3]]
}
}
</script>
</head><body>
<p>
<label for="money">金额:</label>
<input type="text" name="money" onpropertychange=="javascript:change_money(this.value);" oninput="javascript:change_money(this.value);" id="money">
<span id="result"></span></p>
<p>
<input type="text" name="wan" id="wan">
<label for="wan">万 </label>
<input type="text" name="qian" id="qian">
<label for="qian">千</label>
<input type="text" name="bai" id="bai">
<label for="bai">百</label>
<input type="text" name="shi" id="shi">
<label for="shi">拾</label>
<input type="text" name="yuan" id="yuan">
<label for="shi">元</label>
<input type="text" name="jiao" id="jiao">
<label for="shi">角</label>
<input type="text" name="feng" id="feng">
<label for="shi">分</label>
</p>
</body>
</html>
get_cn(currency,-2),
currency就是你输入的数字,-2,1什么的就是以小数点为分界位,从左从右取第几位,大于万位的就调用原来的那个函数digit_uppercase处理了
另外要投入实用的话你还要检测输入数字和数字最大值