首页 > 试题广场 >

分隔符

[编程题]分隔符
  • 热度指数:52424 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
请补全JavaScript代码,要求返回参数数字的千分位分隔符字符串。
示例1

输入

_comma(12300)

输出

'12,300'
可以直接使用正则
function _comma(number) {
                // 补全代码
                number = ('' + number).replace(/\d{1,3}(?=(\d{3})+$)/g, (val) => val+',')
                return number;
            }

发表于 2022-01-14 17:40:15 回复(2)
可以直接循环一下,使用join把","添加进去就行了
function _comma(number) {
              let result = [];
               let rest = String(Math.abs(number));
               while (rest.length) {
                result.push(rest.slice(-3));
                rest = rest.slice(0, -3);
               }
               var r = result.reverse().join(",");
               return number<0 ? "-"+r:r
            }
发表于 2022-06-26 12:19:02 回复(1)
        function _comma(number) {
            // 补全代码
            var num = number;
            var str = '';
            while (num > 1000) {
                //得到千位之后的数 并在三位数之前加上,加上之前获得的数  
                str = ',' + (num % 1000) + str //,300
                //得到千位之前的数 12
                num = parseInt(num / 1000) //12
            }
            //剩下的数字不大于三位 则直接加上之前获得的数
            return num + str; //12,300

        }
发表于 2022-04-16 21:25:09 回复(1)
改造一下可以支持带小数点的
function _comma(number) {
  let res = ''
  let count = 0
  const negative = number < 0 ? '-' : ''
  number = Math.abs(number).toString()
  for (let i = number.length - 1; i >= 0; i--) {
    count += 1
    res = number[i] + res
    if (count % 3 === 0 && i !== 0 && number[i] !== '.') {
      res = ',' + res
    }
  }
  return negative + res
}

console.log(_comma(-123456789.89)) // -123,456,789.89
console.log(_comma(123456789.89)) // 123,456,789.89
console.log(_comma(123456789)) // 123,456,789
console.log(_comma(-123)) // -123
console.log(_comma(1234)) // 1,234

发表于 2021-12-17 15:50:48 回复(4)
function _comma(number) {
    // 补全代码
    let q = number.toString().split('')
    let sum = 0
    var arr = []
    for (let i = q.length - 1; i >= 0; i--) {
        sum++
        if (sum != 4) {
            arr.unshift(q[i])
        } else {
            if (q[i] != '-') {
                arr.unshift(',')
                sum = 1
            }
            arr.unshift(q[i])
        }
    }
    return arr.join('')
}

发表于 2022-03-29 15:35:45 回复(0)
function _comma(number) {
            let res = Math.floor(number.toString().length / 3) // 需要加的逗号个数
            if (res <= 1) {
                // 正常情况下,直接返回
                return number.toString()
            } else {
                const arr = [...number.toString()].reverse()
                //如果长度正好为3的倍数,则头部不需要加,少次循环
                if (number.toString().length % 3 == 0) {
                    for (let index = 1; index < res; index++) {
                        arr.splice(index * 3 + index - 1, 0, ',');
                    }
                } else {
                    for (let index = 1; index <= res; index++) {
                        arr.splice(index * 3 + index - 1, 0, ',');
                    }
                }
                return arr.reverse().join('')
            }

        }
发表于 2022-06-04 19:32:23 回复(1)
  function _comma(number) {
            // 补全代码
            let arr = number.toString().split("")
            if (number < 0) {
                arr.shift()
            }
            for (let index = arr.length; index > 3; index = index - 3) {
                arr.splice(index - 3, 0, ",")
            }
            // console.log(number > 0 ? arr.join("") : "-"+ arr.join(""))
            return number > 0 ? arr.join("") : "-" + arr.join("")
        }
发表于 2023-08-22 16:34:38 回复(0)
// 提供一个思路,是可以封装的
function _comma(number) {
  // 补全代码
  let newNumber = number.toString()
  let n = Math.floor(newNumber.split('').length / 3)
  if(Math.abs(number) < 1000){
    return number.toString()
  }else if(n == 1){
    return `${newNumber.slice(0,-3)},${newNumber.slice(-3)}`
  }else if((n == 2)){
    return `${newNumber.slice(0,-6)},${newNumber.slice(-6,-3)},${newNumber.slice(-3)}`
  }      
}

发表于 2022-11-26 15:45:18 回复(1)
function _comma(number) {
    // 补全代码
    let zf
    if (number < 0) {
        zf = true
    }
    number = Math.abs(number)
    number = number.toString()
    number = number.split('')
    for (i = number.length - 2; i > 1; i = i - 3) {
        console.log('', number)
        number.splice(i - 1, 0, ',')
    }
    if (zf) {
        number.unshift('-')
    }
    return number.join('')
}

发表于 2021-12-29 11:07:21 回复(0)
<!DOCTYPE html>
<html>
    <head>
        <meta charset=utf-8>
    </head>
    <body>
        
        <script type="text/javascript">
            function _comma(number) {
                // 补全代码
                let isPositive = number>0?true:false
                number = number.toString()
                if(!isPositive){
                    number = number.replace("-","")
                }
                let str = ""
                let count = 0
         
                for(let i=number.length-1;i>=0;i--){
                    count++
                    str += number[i]
                    if(count%3==0 && i!=0) str += ","
                }
                let result = ""
                for(let i=str.length-1;i>=0;i--){
                    result += str[i]
                }
                if(isPositive)
                    return result
                
                return "-"+result
            }
        </script>
    </body>
</html>
发表于 2021-12-14 15:24:46 回复(0)
function _comma(number) {
            // 补全代码
            //如果输入不确定,可以用递归
            const star = String(number).split('').reverse()
                //将不需要加分隔符的数字转成字符串直接返回
                if(number < 1000 && number >-1000) {
                    return number.toString()
                }else if (number < 0){
                    //如果为负数的情况需要把翻转后的字符串,负号不参与循环
                    for(let i = 0 ; i < star.length-1;i += 3){
                        //三个字符后面加分号
                        star.splice(i,0,',')
                        i = i + 1
                    }
                    return star.reverse().join('')
                }else {
                    //不为负数的情况,不需要过滤负号
                    for(let i = 0 ; i < star.length;i += 3){
                        star.splice(i,0,',')
                        i = i + 1
                }
                //最后将翻转后的字符串数组的最后一个分号去掉
                return star.reverse().join('').slice(0,-1)
            }

            //number.toLocaleString()
        }
发表于 2023-09-25 08:44:15 回复(0)
function _comma(number) {
    if (number < 0) {
        return number.toString();
    }
    let str = number.toString();
    // 补全代码
    let index = str.length - 1;
    let res = "";
    for(; index >= 2; index -= 3) {
        let temp = index;
        res += str.charAt(temp--);
        res += str.charAt(temp--);
        res += str.charAt(temp);
        res += ",";
    }
    if(index >= 0) {
        while(index >= 0) {
            res += str.charAt(index--);
        }
    }
    return res.split("").reverse().join("");
}

发表于 2023-09-19 10:48:11 回复(0)
function _comma(number) {
  // 补全代码
  let str = number.toString().split('')
//判断是否为负数
  let isNegative = true
  if (str[0] == '-') {
    isNegative = false
    str.splice(0, 1)
  }
  let k = 0
  for (let i = str.length - 1; i > 0; i--) {
    k += 1
    if (k == 3) {
      str[i] = ',' + str[i]
      k = 0
    }
  }
  if (isNegative) {
    return str.join('')
  } else {
    str.unshift('-')
    return str.join('')
  }
}
发表于 2023-04-06 09:52:59 回复(0)
<!DOCTYPE html>
<html>

<head>
    <meta charset=utf-8>
</head>

<body>

    <script type="text/javascript">
        function _comma(number) {
            // 补全代码
            if (number<0) {
                return String(number);
            } else {
                number = number + ''
                var strArr = number.split('');
                var strArr2=number.split('');
                let num = []
                let arr=[]
                let numnum=0
                for (let index = 0; index < strArr.length; index++) {
                    if(strArr[index]=='.'){
                        numnum=index
                        strArr.splice(index, strArr.length-index);
                    }
                    if (index % 3 == 0) {
                       
                        if (index != 0) {
                            num.push(index)
                        }
                    }
                }
                if(numnum>0){
                for (let index = 0; index < strArr2.length; index++) {
                  if(index>numnum-1){
                    arr.push(strArr2[index])
                  }
                }
                }else{
                    arr=[]
                }
                strArr.reverse()
                for (let index = 0; index < num.length; index++) {
                    if (index > 0) {
                        strArr.splice(num[index] + 1, 0, ",");
                    } else {
                        strArr.splice(num[index], 0, ",");
                    }
                }
                let aaa = strArr.reverse().join('')
                return aaa+arr.join('')
            }

        }
    </script>
</body>

</html>
发表于 2023-03-13 15:37:17 回复(1)
      function _comma(number) {
        // 补全代码
        number1 = Math.abs(number); //先取绝对值
        let str = String(number1).split(''); //拆分成数组
        let first = str.length % 3; //第一次需要加逗号的位置
        count = Math.ceil(str.length / 3) - 1; //需要加逗号的次数
        // 如果第一次加逗号是在开始,那么直接跳到索引为3的位置
        first === 0 ? (first = 3) : '';
        for (let i = 0; i < count; i++) {
          str.splice(first, 0, ',');
          first += 4; //加上逗号向后移动四个位置
        }
        return number < 0 ? '-'.concat(...str) : ''.concat(...str);
      }
发表于 2023-02-26 01:23:00 回复(0)
<script type="text/javascript">
         function _comma(number) {
        // 补全代码
        let numStr = String(number);
        // 采用递归
        // 如果是负数 小于等于4结束 整数 小于等于3结束
        if (numStr.length <= 3 || (numStr.startsWith("-") && numStr.length <= 4)) {
            return numStr;
        }
        // 取后三位
        let endTemp = numStr.slice(-3);
        // 去掉后三位
        let startTemp = numStr.slice(0, -3);
        // 采用递归
        return _comma(startTemp) + ',' + endTemp;
                
            }
        </script>

发表于 2022-06-30 08:45:54 回复(0)
<!DOCTYPE html>
<html>
    <head>
        <meta charset=utf-8>
    </head>
    <body>
    	
        <script type="text/javascript">
	function _comma(number) {
        // 补全代码
        if(number>-999 && number < 999){
        	return String(number);
        }

        
        let num = String(number);
        var count =0;
        let resnum = new Array();
        for(let i=num.length-1;i>=0;i--){
        	if(count == 3){
        		count =0;
        		resnum.push(',');
        	}
        	resnum.push(num[i]);
        	count++;
        }
        return resnum.reverse().join('');	        
    }
        </script>
    </body>
</html>

发表于 2022-03-21 14:05:36 回复(0)
请教 这种写法错在哪里呢,
编辑于 2024-04-16 14:19:17 回复(0)
function _comma(number) {
                // 补全代码
                number = number + "";
                return number.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
            }
编辑于 2024-04-12 13:40:25 回复(0)
<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <style>
       /* 填写样式 */
    </style>
</head>

<body>
    <!-- 填写标签 -->
    <script type="text/javascript">
        // 填写JavaScript
       

        function _comma(number) {
            // 补全代码
            const arr = Math.abs(number).toString().split('');
            for (let i = arr.length - 3; i > 0; i = i - 3) {
                arr.splice(i, 0, ',');
            }
            const commaNum = arr.join('');
            return number > 0 ? commaNum : `-${commaNum}`;
        }
    </script>
</body>

</html>

发表于 2024-03-14 12:42:43 回复(0)

问题信息

难度:
141条回答 1138浏览

热门推荐

通过挑战的用户

查看代码