逻辑介绍
- 代码总体区分为两大块,一个是传入的是整数(用Interger()函数处理);当传入的是小数时(处理到小数点后2位),则将小数拆分为整数部分和小数部分分别处理;
- 当传入的是小数时候,存在几种类型的数字,比如:0.1、0.10、00.12、00.00等等这类似的数据,代码中做了特殊判断和处理(parseFloat())
- 该demo的单位是“份”,可能很多人不知道,这是金融行业中名词“份额”的一个单位,若有别的场景需要该代码逻辑,修改单位即可。
- demo写的比较简单,命名和格式很多地方都不太规范,代码逻辑也不够简洁,若有建议,欢迎提出!下面连同HTML的input测试框贴出代码。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>转换测试</title>
</head>
<body>
<div>
<input type="text" name="haha" id="one" onkeyup=exchange()>
<input type="text" name="heihei" id="two">
</div>
</div>
</body>
<script type="text/javascript">
function exchange(){
var m = document.getElementById("one").value;
function ToString(m) {
n = Number(m) + '';
var indexpoint = n.indexOf('.');
if (indexpoint > 12 && m.length - indexpoint == 2) {
return Number(n).toLocaleString() +'0';
}
if (indexpoint > 12 && m.length - indexpoint >= 3) {
return Number(n).toLocaleString();
}
integerpart = n.substring(0, indexpoint); //整数部分
if (indexpoint >= 0){
removezore = parseFloat(n);
if (removezore == integerpart) {
return Interger(integerpart);
}
decimalpart = n.substr(indexpoint+1,2); //小数部分
var strinterger = '', strdecimal = '';
strinterger = Interger(integerpart); //整数部分的转换直接调用转化整数的函数
removefen = strinterger.substring(0, strinterger.length-1); //得到结果后去掉份整数部分的单位“份”
for (var j=0; j < decimalpart.length; j++){
strdecimal += '零壹贰叁肆伍陆柒捌玖'.charAt(decimalpart.charAt(j)); //取得小数部分的大写
}
return removefen +'点' +strdecimal + '份';
}else{
return Interger(n);
}
}
function Interger(n){
if (n.length > 12) {
comma = Number(n).toLocaleString();
comma += ".00";
return comma;
}
var unit = "千百拾亿千百拾万千百拾份", str = "";
cutunit = unit.substr(unit.length - n.length);
for (var i=0; i < n.length; i++){
str += '零壹贰叁肆伍陆柒捌玖'.charAt(n.charAt(i)) + cutunit.charAt(i);
}
result = str.replace(/零(千|百|拾|角)/g, "零").replace(/(零)+/g, "零").replace(/零(万|亿|份)/g, "$1");
if(result.length != 1){
return str.replace(/零(千|百|拾|角)/g, "零").replace(/(零)+/g, "零").replace(/零(万|亿|份)/g, "$1");
}else{
return str.replace(/零(千|百|拾|角)/g, "零").replace(/(零)+/g, "零");
}
}
var rs = ToString(m);
document.getElementById("two").value = rs;
}
</script>
</html>