如何设置格式在JavaScript中的特定长度的整数?(How can I format an in

2019-07-30 05:09发布

我在JavaScript中的一些,我所知道的是小于10000,也非负。 我想将其显示为四位数字,有前导零。 有什么比下面更优雅?

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

我想是内置到JavaScript的东西,但我似乎无法找到任何东西。

Answer 1:

我不认为有什么“建”成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'


Answer 2:

我认为,最简单的方法,是这样的:

("000" + num).slice(-4)

加垫的数量是一个字符串。
当您添加一个数字字符串,将它转换为字符串。
串具有方法切片,即retuns的固定长度块的字符串。
如果长度为负,返回的字符串从字符串末尾切片。

去测试:

var num=12;
console.log(("000" + num).slice(-4)); // Will show "0012"

(造成这仅适用于高达4个位数的正整数)



Answer 3:

这可能帮助:

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'));


Answer 4:

由于ES2017填充到最小长度可简单地用做String.prototype.padStart和String.prototype.padEnd :

let num = 3
let str = num.toString().padStart(3, "0")
console.log(str) // "003"

或者,如果只有一个浮动的整数部分应该是一个固定长度:

let num = 3.141
let arr = num.toString().split(".")
arr[0] = arr[0].padStart(3, "0")
let str = arr.join(".")
console.log(str) // "003.141"


Answer 5:

一个有趣的(但很有意思的)方式用零前缀号码:

function FormatInteger(num, length) {

    return (num / Math.pow(10, length)).toFixed(length).substr(2);
}


Answer 6:

我认为最紧凑而直观的方法是:

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

slice这里的方法可以替换为substr ,如果这是更直观的编码器。



Answer 7:

最新与ES6 重复()方法:

    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


Answer 8:

怎么样是这样的:

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


Answer 9:

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

const formatNumberToString = (num, minChars) => {
  return num.toString().length < minChars
   ? formatNumberToString(`0${num}`, minChars)
   : num.toString()
}
// formatNumberToString(12, 4) // "0012"
// formatNumberToString(12, 5) // "00012"
// formatNumberToString(1, 4) // "0001"
// formatNumberToString(1, 2) // "01"
// formatNumberToString(12, 2) // "12"
// formatNumberToString(12, 1) // "12"

同样,这可以只是一条线实现



Answer 10:

你可以疯狂地使用这样的方法:

function PadDigits(input, totalDigits) 
{ 
    var result = input;
    if (totalDigits > input.length) 
    { 
        for (i=0; i < (totalDigits - input.length); i++) 
        { 
            result = '0' + result; 
        } 
    } 
    return result;
} 

但它不会使生活更轻松。 C#在String类像PadLeft方法和PadRight,不幸的是JavaScript不具备此功能内建



Answer 11:

A“而”循环应该使这很容易做到。

function formatLength(a) {
    var num = document.getElementById(a)
    while (num.value.length < 4) {
        num.value = '0' + num.value
    }
}

这将通过直到NUM值的长度达到循环4位(假设你在数元素的id已通过作为参数)



Answer 12:

我遇到了很多同样的问题,我发现了一个紧凑的方式来解决这个问题。 如果我不得不多次使用它在我的代码,或者如果我是这样做的任何超过四个数字,我会使用其他建议的解决方案之一,但这种方式让我把它们都放在一个表达式:

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

它实际上是相同的代码,但使用三元运算符,而不是“的if-else”语句(并移动“+ X”,这将永远是表达的一部分,有条件的代码外)。



Answer 13:

另一个:

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;
}


文章来源: How can I format an integer to a specific length in javascript?