Как я могу отформатировать целое число определенной длины в JavaScript? - PullRequest
32 голосов
/ 15 июля 2009

У меня есть номер в Javascript, который, как я знаю, меньше 10000 и тоже неотрицательный. Я хочу отобразить его в виде четырехзначного числа с начальными нулями. Есть ли что-нибудь более элегантное, чем следующее?

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

Мне нужно что-то, что встроено в Javascript, но я не могу ничего найти.

Ответы [ 13 ]

76 голосов
/ 23 апреля 2015

Самый простой способ, которым я думаю, это:

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

Добавленный номер - это строка.
Когда вы добавляете число в строку, оно преобразуется в строку.
Strings имеет метод slice, который возвращает фрагмент строки фиксированной длины.
Если длина отрицательна, возвращаемая строка отрезается от конца строки.

для проверки:

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

(Конечно, это работает только для натуральных чисел до 4 цифр)

41 голосов
/ 15 июля 2009

Я не думаю, что для этого есть что-то «встроенное» в язык 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'
15 голосов
/ 15 июля 2009

Это может помочь:

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'));
7 голосов
/ 05 апреля 2018

Поскольку заполнение 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"
6 голосов
/ 15 июля 2009

Забавный (но интересный) способ префиксировать числа нулями:

function FormatInteger(num, length) {

    return (num / Math.pow(10, length)).toFixed(length).substr(2);
}
2 голосов
/ 27 сентября 2018

Последний с ES6 repeat () метод:

    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
2 голосов
/ 12 июля 2016

Я думаю, что самый компактный, но интуитивно понятный способ:

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

Метод slice здесь можно заменить на substr, если он более интуитивен для кодера.

1 голос
/ 08 ноября 2017

Я пришел за ответом, но я думаю, что это лучший функциональный подход (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"

также, это может быть реализовано только в одну строку

1 голос
/ 15 июля 2009

Как насчет этого:

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
0 голосов
/ 10 августа 2015

Еще один:

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...