JS3 分隔符

在这里插入图片描述从示例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>

在这里插入图片描述
提交通过
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值