如何在javascript中将整数格式化为特定长度?

如何在javascript中将整数格式化为特定长度?,javascript,formatting,Javascript,Formatting,我在Javascript中有一个数字,我知道它不到10000,而且是非负的。我想把它显示为一个四位数,带前导零。有什么比下面更优雅的吗 if(num<10) num="000"+num; else if(num<100) num="00"+num; else if(num<1000) num="0"+num; if(num我不认为JavaScript语言中有任何“内置”的东西可以做到这一点。下面是一个简单的函数: function FormatNumberLength(num

我在Javascript中有一个数字,我知道它不到10000,而且是非负的。我想把它显示为一个四位数,带前导零。有什么比下面更优雅的吗

if(num<10) num="000"+num;
else if(num<100) num="00"+num;
else if(num<1000) num="0"+num;

if(num我不认为JavaScript语言中有任何“内置”的东西可以做到这一点。下面是一个简单的函数:

function FormatNumberLength(num, length) {
    var r = "" + num;
    while (r.length < length) {
        r = "0" + r;
    }
    return r;
}


FormatNumberLength(10000, 5) outputs '10000'
FormatNumberLength(1000, 5)  outputs '01000'
FormatNumberLength(100, 5)   outputs '00100'
FormatNumberLength(10, 5)    outputs '00010'
函数格式numberlength(num,length){
var r=”“+num;
而(r.长度<长度){
r=“0”+r;
}
返回r;
}
FormatNumberLength(10000,5)输出“10000”
FormatNumberLength(1000,5)输出“01000”
FormatNumberLength(100,5)输出“00100”
FormatNumberLength(10,5)输出“00010”
这可能会有帮助:

String.prototype.padLeft = function (length, character) { 
     return new Array(length - this.length + 1).join(character || '0') + this; 
}

var num = '12';

alert(num.padLeft(4, '0'));

你可能会疯狂使用以下方法:

function PadDigits(input, totalDigits) 
{ 
    var result = input;
    if (totalDigits > input.length) 
    { 
        for (i=0; i < (totalDigits - input.length); i++) 
        { 
            result = '0' + result; 
        } 
    } 
    return result;
} 
功能填充码(输入,总数字)
{ 
var结果=输入;
如果(totalDigits>input.length)
{ 
对于(i=0;i<(totalDigits-input.length);i++)
{ 
结果='0'+结果;
} 
} 
返回结果;
} 

但这并不会让生活变得更简单。C#在String类中有一个类似PadLeft和PadRight的方法,不幸的是Javascript没有内置此功能

function prefixZeros(number, maxDigits) 
{  
    var length = maxDigits - number.toString().length;
    if(length <= 0)
        return number;

    var leadingZeros = new Array(length + 1);
    return leadingZeros.join('0') + number.toString();
}
//Call it like prefixZeros(100, 5); //Alerts 00100
函数前缀零(数字,最大位数)
{  
var length=maxDigits-number.toString().length;
如果(长度一种有趣的(但有趣的)用零作为数字前缀的方法:

function FormatInteger(num, length) {

    return (num / Math.pow(10, length)).toFixed(length).substr(2);
}
一个“while”循环应该可以让这变得足够简单

function formatLength(a) {
    var num = document.getElementById(a)
    while (num.value.length < 4) {
        num.value = '0' + num.value
    }
}
函数格式长度(a){
var num=document.getElementById(a)
while(num.value.length<4){
num.value='0'+num.value
}
}

这将循环直到num值的长度达到4位(假设您已将number元素的id作为参数传入)

我遇到了几乎相同的问题,我找到了一种简洁的方法来解决它。如果我必须在代码中多次使用它,或者如果我使用它的位数超过四位数,我会使用其他建议的解决方案之一,但通过这种方法,我可以将其全部放在一个表达式中:

((x<10)?"000": (x<100)?"00": (x<1000)?"0": "") + x

((x我能想到的最简单的方法是:

("000" + num).slice(-4)
填充数字是一个字符串。
将数字添加到字符串时,它将转换为字符串。
Strings具有方法slice,该方法重新运行字符串的固定长度片段。
如果长度为负数,则返回的字符串将从字符串的末尾切片

要测试:

var num=12;
console.log(("000" + num).slice(-4)); // Will show "0012"
当然,这只适用于最多4位的正整数。稍微复杂一点的解决方案将处理正整数:

'0'.repeat( Math.max(4 - num.toString().length, 0)) + num
只要位数(字符串长度)小于4,就可以通过重复添加零来创建字符串 添加数字,然后再将其转换为字符串。

另一个:

function format_number_length(num, length) {
    var r = num.toString();
    if (r.length<length) r = Array(length - r.length + 1).join('0') + r;
    return r;
}
函数格式\u编号\u长度(num,length){
var r=num.toString();

如果(r.length我认为最简洁直观的方法是:

function toFixedLength(input, length, padding) {
    padding = String(padding || "0");
    return (padding.repeat(length) + input).slice(-length);
}

如果程序员更直观,这里的
slice
方法可以替换为
substr

我来寻找答案,但我认为这是一种更好的功能方法(ES6):

const formatNumberToString=(num,minChars)=>{
返回num.toString().length

此外,这可以在一行中实现,因为ES2017填充到最小长度只需使用 和 :

让num=3
设str=num.toString().padStart(3,“0”)
控制台日志(str)/“003”
或者,如果浮子的整个部分应为固定长度:

let num=3.141
设arr=num.toString().split(“.”)
arr[0]=arr[0]。焊盘起始(3,“0”)
设str=arr.join(“.”)
控制台日志(str)/“003.141”
ES6方法的最新版本:


我知道这个问题有点老了,但对于任何在Java或Python上寻找类似字符串格式的东西的人来说,我有以下帮助器方法:

String.format = (...args) => {
    if( args.length == 0 ){
        throw new Error("String format error: You must provide at least one argument");
    }
    const delimiter = "@LIMIT*";
    const format = String(args.shift(1,0)).replace(/(%[0-9]{0,}[sd])/g, delimiter+"$1"+delimiter).split(delimiter); // First element is the format
    if( [...format].filter(el=>el.indexOf("%")>-1).length != args.length ){
        throw new Error("String format error: Arguments must match pattern");
    }
    if( format.length == 1 && args.length == 0 ){
        return String(format);
    }
    let formattedString = "";
    // patterns
    const decimalPattern = /%[0-9]{0,}d/;
    const stringPattern  = /%s/;
    if( format.length == 0 ){
        throw new Error("String format error: Invalid format");
    }
    let value        = null;
    let indexOfParam = 0;
    let currPattern  = null;
    while( args.length > 0 ) {
        currPattern = format[indexOfParam];
        indexOfParam++;
        if( currPattern.indexOf("%")<0 ){
            formattedString+=currPattern;
            continue;
        }
        value = args.shift(0,1);
        if( decimalPattern.test(currPattern) ){
            let numberLength = parseInt(currPattern.replace(/[^0-9]/g,''));
            if( isNaN(numberLength) ){
                numberLength = 0;
            }
            formattedString+=numberToLength(value, numberLength);
        } else if( stringPattern.test(currPattern) ) {
            if( typeof value === 'object' && value.toSource ){
                formattedString+=String(value.toSource());
            } else {
                formattedString+=String(value);
            }
        } else {
            throw new Error("String format error: Unrecognized pattern:"+currPattern);
        }
    }
    return formattedString;
}

const numberToLength = (number, length) => {
    length = parseInt(length);
    number = String(number);
    if( isNaN(length) || isNaN(parseInt(number)) ){
        throw new Error("Invalid number passed");
    }
    while( number.length < length ) {
        number = "0" + number;
    }
    return number;
}
String.format=(…args)=>{
如果(args.length==0){
抛出新错误(“字符串格式错误:必须至少提供一个参数”);
}
常量分隔符=“@LIMIT*”;
const format=String(args.shift(1,0)).replace(/([0-9]{0,}[sd])/g,delimiter+“$1”+delimiter.split(delimiter);//第一个元素是格式
if([…format].filter(el=>el.indexOf(“%”)>-1).length!=args.length){
抛出新错误(“字符串格式错误:参数必须匹配模式”);
}
if(format.length==1&&args.length==0){
返回字符串(格式);
}
设formattedString=“”;
//图案
常量decimalPattern=/%[0-9]{0,}d/;
常量stringPattern=/%s/;
if(format.length==0){
抛出新错误(“字符串格式错误:无效格式”);
}
设value=null;
设indexOfParam=0;
设currPattern=null;
而(args.length>0){
currPattern=格式[indexOfParam];
indexOfParam++;
if(currPattern.indexOf(“%”){
长度=parseInt(长度);
数字=字符串(数字);
if(isNaN(长度)| | isNaN(parseInt(数字))){
抛出新错误(“传递的数字无效”);
}
while(number.length
我更喜欢调用num.toString()方法。使用““+num”的工作原理与.toString()相同,如果这对您很重要的话,需要更少的字符来使.js文件更紧凑。
函数FormatInteger(n,l,c){return(n/Math.pow(10,l)).toFixed(l.substr(2).替换(/0/g,c | |‘)}
控制台.log(FormatInteger)(432,8));
您可以使用
repeat
-
(n,length)=>(“0”。repeat(length)+n)。slice(-length)    const length_required = 5;
    let num = 10;
    num = "0".repeat(length_required - String(num).length) + num;
    console.log(num)
    // output: 00010

    let num = 1000;
    num = "0".repeat(length_required - String(num).length) + num;
    console.log(num)
    // output: 01000
String.format = (...args) => {
    if( args.length == 0 ){
        throw new Error("String format error: You must provide at least one argument");
    }
    const delimiter = "@LIMIT*";
    const format = String(args.shift(1,0)).replace(/(%[0-9]{0,}[sd])/g, delimiter+"$1"+delimiter).split(delimiter); // First element is the format
    if( [...format].filter(el=>el.indexOf("%")>-1).length != args.length ){
        throw new Error("String format error: Arguments must match pattern");
    }
    if( format.length == 1 && args.length == 0 ){
        return String(format);
    }
    let formattedString = "";
    // patterns
    const decimalPattern = /%[0-9]{0,}d/;
    const stringPattern  = /%s/;
    if( format.length == 0 ){
        throw new Error("String format error: Invalid format");
    }
    let value        = null;
    let indexOfParam = 0;
    let currPattern  = null;
    while( args.length > 0 ) {
        currPattern = format[indexOfParam];
        indexOfParam++;
        if( currPattern.indexOf("%")<0 ){
            formattedString+=currPattern;
            continue;
        }
        value = args.shift(0,1);
        if( decimalPattern.test(currPattern) ){
            let numberLength = parseInt(currPattern.replace(/[^0-9]/g,''));
            if( isNaN(numberLength) ){
                numberLength = 0;
            }
            formattedString+=numberToLength(value, numberLength);
        } else if( stringPattern.test(currPattern) ) {
            if( typeof value === 'object' && value.toSource ){
                formattedString+=String(value.toSource());
            } else {
                formattedString+=String(value);
            }
        } else {
            throw new Error("String format error: Unrecognized pattern:"+currPattern);
        }
    }
    return formattedString;
}

const numberToLength = (number, length) => {
    length = parseInt(length);
    number = String(number);
    if( isNaN(length) || isNaN(parseInt(number)) ){
        throw new Error("Invalid number passed");
    }
    while( number.length < length ) {
        number = "0" + number;
    }
    return number;
}