从示例1看出,number输入的参数是一个数字型,输出带引号,是一个字符串型。
要求每3位数带一个分隔符
算法思想:
将number转换为字符串,求其长度,若小于等于3,直接输出;
否则对3取余。
若余数为1,则第1位后面加上分隔符,再每隔3位加分隔符;
若余数为2,则第2位后面加上分隔符,再每隔3位加分隔符;
若余数为3,则第3位后面加上分隔符,再每隔3位加分隔符;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>js 3 分隔符</title>
</head>
<body>
<script type="text/javascript">
function _comma(number) {
// 补全代码
//12345678 => 12,345,678
let strNum=number.toString();
let lenNum=strNum.length;
let temp='';
if( lenNum <=3 ){
return strNum;
}else{
switch( lenNum % 3 ){
case 1:
temp=strNum.slice(0,1)+',';
for(let i=1;i<lenNum;i=i+3){
temp=temp+strNum.slice(i,i+3)+',';
// console.log("1:"+strNum.slice(i,i+3));
}
// return temp;
return temp.slice(0,temp.length-1);
break;
case 2:
temp=strNum.slice(0,2)+',';
for(let i=2;i<lenNum;i=i+3){
temp=temp+strNum.slice(i,i+3)+',';
// console.log("2:"+strNum.slice(i,i+3));
}
// return temp;
return temp.slice(0,temp.length-1);
break;
case 0:
temp=strNum.slice(0,3)+',';
for(let i=3;i<lenNum;i=i+3){
temp=temp+strNum.slice(i,i+3)+',';
// console.log("3:"+strNum.slice(i,i+3));
}
// console.log(temp);
return temp.slice(0,temp.length-1);
break;
}
}
}
console.log( _comma(123) );
console.log( _comma(1234) );
console.log( _comma(12345) );
console.log( _comma(123456) );
console.log( _comma(1234567) );
console.log( _comma(12345678) );
console.log( _comma(123456789) );
</script>
</body>
</html>
调试了两个小时,自己测试的全通过了,结果一提交,发现还有负数的情况。。。。。
重新调整算法思想:
若number的绝对值小于1000,则转换成字符串输出。
若number的绝对值大于等于1000,
设一个flag标记正负数,flag=true为正数。
取其绝对值转换成字符串,对3取余。
若余数为1,则第1位后面加上分隔符,再每隔3位加分隔符;
若余数为2,则第2位后面加上分隔符,再每隔3位加分隔符;
若余数为3,则第3位后面加上分隔符,再每隔3位加分隔符;
最后若flag为false,前面加上负号,否则直接返回。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>js 3 分隔符</title>
</head>
<body>
<script type="text/javascript">
function _comma(number) {
// 补全代码
//12345678 => 12,345,678
//Math.abs(x) 返回 x
let flag='';
if( Math.abs(number) < 1000 ){
return number.toString();
}else{
//先判断正负然后标记
if(number>0){
flag=true;
}else{
flag=false;
}
//原思路
let strNum=Math.abs(number).toString();
let lenNum=strNum.length;
let temp='';
switch( lenNum % 3 ){
case 1:
temp=strNum.slice(0,1)+',';
for(let i=1;i<lenNum;i=i+3){
temp=temp+strNum.slice(i,i+3)+',';
// console.log("1:"+strNum.slice(i,i+3));
}
if(flag) return temp.slice(0,temp.length-1);
else return "-"+temp.slice(0,temp.length-1);
break;
case 2:
temp=strNum.slice(0,2)+',';
for(let i=2;i<lenNum;i=i+3){
temp=temp+strNum.slice(i,i+3)+',';
// console.log("2:"+strNum.slice(i,i+3));
}
if(flag) return temp.slice(0,temp.length-1);
else return "-"+temp.slice(0,temp.length-1);
break;
case 0:
temp=strNum.slice(0,3)+',';
for(let i=3;i<lenNum;i=i+3){
temp=temp+strNum.slice(i,i+3)+',';
// console.log("3:"+strNum.slice(i,i+3));
}
if(flag) return temp.slice(0,temp.length-1);
else return "-"+temp.slice(0,temp.length-1);
break;
}
}
}
console.log( _comma(-123) );
console.log( _comma(-1234) );
console.log( _comma(-12345) );
console.log( _comma(-123456) );
console.log( _comma(-1234567) );
console.log( _comma(-12345678) );
console.log( _comma(-123456789) );
</script>
</body>
</html>
提交通过