因为最近开发的是桌面混合应用,在开发项目中一直需要导出压缩包给其他团队协作或者给产品看效果。
为了导出压缩包,我专门在gulpfile里写了导出命令。每个导出包都带了时间后缀以作区分。但是当今天导出包时,发现变成了201631xxxx,不是我理想中的20160301xxxx,于是催生了这个补零函数。今天突然有了兴致,记录一下这个函数的进化过程。
第一时间的想法是这样的:
/** * @param {Number} num 原始数字 * @param {Number} digit 显示位数, 默认为2, 即: 8-->08 */ function addZero(num, digit) { var min = Math.pow(10, digit ? (digit - 1) : 1); //满足该位数的最小数,如2位数为10 if(num < min) { //如果小于最小数,则补零 return '0' + num; } return num + ''; }
addZero(12, 3); //012
addZero(12, 4); //012
此时gulp导出一下,结果很满意变为了20160301xxxx。基本思路是细细一想不对,我这边虽然传了个digit进去,但根本没起什么作用,如果满足条件,无论怎样都只会加一个零。于是再进行改进。
其实无需与满足位数的最小数进行对比,只需要比位数。
/** * @param {Number} num 原始数字 * @param {Number} length 显示位数, 默认为2, 即: 8-->08 * @return {String} */ function addZero(num, length) { var originLength = (num + '').length; var relativeLength = (length || 2) - originLength; if(relativeLength > 0) { var zeros = ''; for(var i = 0; i < relativeLength; i++) { zeros += '0'; } return zeros + num; } return num + ''; }
addZero(12, 4); //0012
这下运行出来非常的ok! 慢着,你敢打小数点进去吗?
addZero(12.6, 4); //12.6
呃,考虑不周,继续修改:
function addZero(num, length) { var originLength = (parseInt(num) + '').length; var relativeLength = (length || 2) - originLength; if(relativeLength > 0) { var zeros = ''; for(var i = 0; i < relativeLength; i++) { zeros += '0'; } return zeros + num; } return num + ''; } addZero(12.6, 3); //012.6 addZero(12.6, 4); //0012.6
这下运行出来非常的ok! 可是我当真不喜欢这循环,好吧。继续。。
function addZero(num, length) { var originLength = (parseInt(num) + '').length; var relativeLength = (length || 2) - originLength; if(relativeLength > 0) { return (Math.pow(10, relativeLength) + '').substr(1) + num; } return num + ''; } addZero(12.6, 3); //012.6
OK了,先这样吧,下班了~