群里有人提问一个小问题,作为萌新的我,喜欢根据别人实际工作中碰到的问题作为练手问题进行尝试,也算是给自己找一些练手的小需求吧。但是代码写得实在太少了,显得十分菜逼,不管如何,以后还是要经常多写写才行,不管质量如何。
JavaScript 第一种实现方法
按照原来写C语言的惯性思维,我首先想到的写法是将数字作为字符串,判断字符串长度并进行补零操作,这种写法虽然不够灵活,但简单易懂。
function fixZeroForNumber(diynum) {
if (diynum >= 10000 || diynum < 0){
console.log('diynum error!')
return;
}
let diynumToString = diynum.toString();
switch (diynumToString.length) {
case 1:
return '0000' + diynumToString;
break;
case 2:
return '000' + diynumToString;
break;
case 3:
return '00' + diynumToString;
break;
case 4:
return '0' + diynumToString;
break;
default:
return diynumToString;
}
}
console.log(fixZeroForNumber(9999));
console.log(fixZeroForNumber(999));
console.log(fixZeroForNumber(99));
console.log(fixZeroForNumber(9));
console.log(fixZeroForNumber(99999));
console.log(fixZeroForNumber(-1));
JavaScript 第二种实现方法
下边的这个思路性能更好,代码也更简单,可自定义也更强一些。相当于字符串当作数组,追加0,并根据长度减少多出的0的个数。具体如下:
function fixZeroForNumber(str, n) {
if (parseInt(str) >= 10000 || parseInt(str) < 0){
console.log('str error!')
return;
}
return (Array(n).join(0) + str).slice(-n);
}
console.log(fixZeroForNumber(9999,5));
console.log(fixZeroForNumber(999,5));
console.log(fixZeroForNumber(99,5));
console.log(fixZeroForNumber(9,5));
console.log(fixZeroForNumber(99999,5));
JavaScript 第三种实现方法
如果考虑性能开销更低的话,可以使用下边的方法,更加贴近C的写法,上边第一种方法虽然简单但是可定制很差。第二种的主要是要考虑 array.join 也是一种开销。
function fixZeroForNumber(num, n) {
let len = num.toString().length;
while(len < n) {
num = "0" + num;
len++;
}
return num;
}
console.log(fixZeroForNumber(1,4));
console.log(fixZeroForNumber(10,4));
console.log(fixZeroForNumber(100,4));
console.log(fixZeroForNumber(100,4));
console.log(fixZeroForNumber(1000,4));
console.log(fixZeroForNumber(10000,4));