HTML代码:
<div class="inp-be">
输入数字
<input type="text" id="enterNumber" value="99999" oninput="return EditChange();">
</div>
<div class="inp-end">
转换后
<input type="text" id="conversion" value="111" style="width: 400px" >
</div>
JS函数:
function conversionNumber(dValue) {
var maxDec = 2;
//验证输入金额数值或数值字符串:
dValue = dValue.toString().replace(/,/g, "");
//金额数值转字符、移除逗号、移除前导零
dValue = dValue.replace(/^0+/, "");
if (dValue == "") {
return "零";
} //错误:金额为空
else if (isNaN(dValue)) {
return "错误:金额不是合法的数值!";
}
//负数的符号“-”的大写:“负”字。可自定义字符,如“(负)”
var minus = "";
//币种名称(如“人民币”,默认空)
var CN_SYMBOL = "";
if (dValue.length > 1) {
if (dValue.indexOf('-') == 0) {
dValue = dValue.replace("-", "");
minus = "负";
} //处理负数符号“-”
if (dValue.indexOf('+') == 0) {
dValue = dValue.replace("+", "");
} //处理前导正数符号“+”(无实际意义)
}
//变量定义:
var vInt = "";
//字符串:金额的整数部分、小数部分
var vDec = "";
//字符串:要输出的结果
var resAIW;
//数组(整数部分.小数部分),length=1时则仅为整数
var parts;
//数组:数字(0~9——零~玖);基(十进制记数系统中每个数字位的基是10——拾,佰,仟);大基(万,亿,兆,京,垓,杼,穰,沟,涧,正);辅币(元以下,角/分/厘/毫/丝)
var digits, radices, bigRadices, decimals;
//零计数
var zeroCount;
//循环因子;前一位数字;当前位数字
var i, p, d;
//整数部分计算用:商数、模数
var quotient, modulus;
//金额数值转换为字符,分割整数部分和小数部分:整数、小数分开来搞(小数部分有可能四舍五入后对整数部分有进位)
var NoneDecLen = (typeof (maxDec) == "undefined" || maxDec == null || Number(maxDec) < 0 || Number(maxDec) > 5); //是否未指定有效小数位(true/false)
//数组赋值:(整数部分.小数部分),Array的length=1则仅为整数。
parts = dValue.split('.');
if (parts.length > 1) {
vInt = parts[0];
vDec = parts[1]; //变量赋值:金额的整数部分、小数部分
if (NoneDecLen) {
maxDec = vDec.length > 5 ? 5 : vDec.length;
} //未指定有效小数位参数值时,自动取实际小数位长但不超5
var rDec = Number("0." + vDec);
rDec *= Math.pow(10, maxDec);
rDec = Math.round(Math.abs(rDec));
rDec /= Math.pow(10, maxDec); // 小数四舍五入
var aIntDec = rDec.toString().split('.');
if (Number(aIntDec[0]) == 1) {
vInt = (Number(vInt) + 1).toString();
} //小数部分四舍五入后有可能向整数部分的个位进位(值1)
if (aIntDec.length > 1) {
vDec = aIntDec[1];
} else {
vDec = "";
}
} else {
vInt = dValue;
vDec = "";
if (NoneDecLen) {
maxDec = 0;
}
}
if (vInt.length > 44) {
return "错误:数值过大!整数位长【" + vInt.length.toString() + "】超过了上限!";
}
//准备各字符数组
digits = new Array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"); //零~玖
radices = new Array("", "拾", "佰", "仟"); //拾,佰,仟
bigRadices = new Array("", "万", "亿", "兆", "京", "垓", "杼", "穰", "沟", "涧", "正"); //万,亿,兆,京,垓,杼,穰,沟,涧,正
decimals = new Array("角", "分", "厘", "毫", "丝"); //角/分/厘/毫/丝
resAIW = ""; //开始处理
//处理整数部分(如果有)
if (Number(vInt) > 0) {
zeroCount = 0;
for (i = 0; i < vInt.length; i++) {
p = vInt.length - i - 1;
d = vInt.substr(i, 1);
quotient = p / 4;
modulus = p % 4;
if (d == "0") {
zeroCount++;
} else {
if (zeroCount > 0) {
resAIW += digits[0];
}
zeroCount = 0;
resAIW += digits[Number(d)] + radices[modulus];
}
if (modulus == 0 && zeroCount < 4) {
resAIW += bigRadices[quotient];
}
}
resAIW;
}
//处理小数部分(如果有)
for (i = 0; i < vDec.length; i++) {
d = vDec.substr(i, 1);
if (d != "0") {
resAIW += digits[Number(d)] + decimals[i];
}
}
//处理结果
if (resAIW == "") {
resAIW = "零";
} //零元
if (vDec == "") {
resAIW ;
} //...元整
resAIW = CN_SYMBOL + minus + resAIW; //人民币/负......元角分/整
return resAIW;
}
网页JS调用:
var j = conversionNumber(document.getElementById("enterNumber").value);
document.getElementById("conversion").value = j;
function EditChange(){
document.getElementById("conversion").value = conversionNumber(document.getElementById("enterNumber").value);
}
CSS代码:
body{
font-family:"Microsoft YaHei";
background: linear-gradient(to right, #1D8064, #7CD68B);
}
.inp-be{
margin:10% 0% 0% 0%;
text-align: center;
}
.inp-end{
width:40%;
margin:0px auto;
text-align: center;
}
.inp-end{
margin:20px auto;
}
.inp-be input,.inp-end input{
padding: 6px 12px;
font-size: 14px;
line-height: 1.42857143;
color: #555;
background-color: #fff;
background-image: none;
border: 1px solid #ccc;
border-radius: 4px;
}