问题描述:在项目中遇到产品要求自动生成序号,序号要求是四位,如果不足四位就以0补充,例如一个数字是32,则显示应该为0032
以下使用num代表需要转换的数字,length代表需要保留的位数
解决方法1:
let num = 38;
function fn(num, length) {
return (num/Math.pow(10,length)).toFixed(length).substr(2);
}
fn(num, 4)
// 这个方法先调用Math.pow求出10的length幂的值,再用num/这个值,得出一个小数,再调用toFixed保留小数位数后length位,toFixed返回值是一个字符串,此时再调用字符串的substr方法截取掉字符串的小数点和小数点前面的0
解决方法2:
let num = 38;
function fn(num, length) {
return ( '0000000000000000' + num ).substr( -length );
}
let x = fn(num, 4)
// 这个方法使用到了字符串的拼接和字符串的截取,先在当前数字前面拼接上多个0,再从后往前截取需要的位数
解决方法3:
let num = 38;
function fn(num, length) {
return (Array(length).join('0') + num).slice(-length);
}
let x = fn(num, 4)
// 这个方法中使用了Array(length)生成一个空数组,Array()函数的特性,如果只传递给它一个数字参数,会返回指定个数元素为空的数组,所以调用了Array(length)方法后,生成了一个lengh位数的数组,但元素都为empty;再调用数组的join将数组按特定字符转换成字符串,然后将num拼接到这个字符串的最后,再调用slice把字符串从后往前截取,截取位数传入你需要的位数