7

Добавить ведущие нули к числу в JavaScript

1

Заголовок: Как добавить ведущие нули к числу в JavaScript?

Тело вопроса: В JavaScript мне нужно добавлять нули до значения числа. Например, если у меня есть число 9, оно должно отображаться как "0009". Для числа 10 результатом должно быть "0010". Обратите внимание, что в любом случае результат должен содержать ровно четыре цифры.

Один из способов решения этой задачи заключается в том, чтобы вычесть 4 из числа, чтобы получить количество нулей, которые нужно добавить. Однако, меня интересует, есть ли более элегантный способ достижения этой цели?

Благодарю вас заранее за помощь!

5 ответ(ов)

2

Конечно! Вот перевод вашего кода на русский в стиле ответа на StackOverflow:

function padToFour(number) {
  if (number <= 9999) { 
    number = ("000" + number).slice(-4); 
  }
  return number;
}

Что-то вроде этого?

Бонус: изящная и непонятная однострочная версия ES6:

let padToFour = number => number <= 9999 ? `000${number}`.slice(-4) : number;

Теперь о некоторых особенностях ES6:

  • let — это переменная, имеющая блочную область видимости (в отличие от var, у которой область видимости функциональная).
  • => — это стрелочная функция, которая, помимо прочего, заменяет function и предшествует ее параметрам.
  • Если у стрелочной функции только один параметр, можно опустить скобки (поэтому number =>).
  • Если тело стрелочной функции состоит из одной строки, начинающейся с return, можно опустить фигурные скобки и ключевое слово return, просто используя выражение.
  • Для того чтобы свести тело функции к одной строке, я использовал тернарное выражение.
0

Вы можете сделать что-то вроде этого:

function pad(num, size) {
  return (Math.pow(10, size) + ~~num).toString().substring(1);
}

Правка: Это была просто базовая идея для функции, но для добавления поддержки больших чисел (а также для обработки некорректного ввода) будет лучше сделать так:

function pad(num, size) {
  if (num.toString().length >= size) return num;
  return (Math.pow(10, size) + Math.floor(num)).toString().substring(1);
}

Эта функция делает 2 вещи:

  1. Если число больше, чем указанная длина, она просто возвращает это число.
  2. Использование Math.floor(num) вместо ~~num позволит поддерживать большие числа.
0

Недавно мне тоже понадобилось сделать что-то подобное.

Вот функция, которая добавляет нули перед числом до заданного количества цифр:

function padDigits(number, digits) {
    return Array(Math.max(digits - String(number).length + 1, 0)).join(0) + number;
}

Использовать её можно следующим образом:

padDigits(9, 4);  // "0009"
padDigits(10, 4); // "0010"
padDigits(15000, 4); // "15000"

Хотя решение не идеальное с точки зрения красоты, оно эффективно и делает свою работу.

0

Вы привели код, который добавляет нули к началу строки или числа, чтобы достичь заданной длины. Вот краткая пояснительная запись:

String.prototype.padZero = function(len, c) {
    var s = '', 
        c = c || '0', // Символ заполнения по умолчанию '0'
        len = (len || 2) - this.length; // Вычисляем, сколько нулей нужно добавить

    while (s.length < len) {
        s += c; // Добавляем символ заполнения
    }
    return s + this; // Возвращаем заполненную строку
}

Number.prototype.padZero = function(len, c) {
    return String(this).padZero(len, c); // Применяем padZero к числу через преобразование в строку
}

Как использовать:

  • padZero для строки:
let str = "5";
console.log(str.padZero(3)); // Вывод: "005"
  • padZero для числа:
let num = 8;
console.log(num.padZero(4)); // Вывод: "0008"

В обоих случаях, len указывает общую длину возвращаемой строки, а c — это символ, который будет использоваться для заполнения (по умолчанию это '0'). Если вам нужно другое значение для c, вы можете передать его в качестве второго аргумента.

Если у вас есть другие вопросы или нужны дополнительные объяснения, не стесняйтесь спрашивать!

0

Это не самый «изящный» подход, но операции с целыми числами выполняются быстрее, чем конкатенация строк для добавления каждого нуля.

function ZeroPadNumber(nValue) {
    if (nValue < 10) {
        return ('000' + nValue.toString());
    } else if (nValue < 100) {
        return ('00' + nValue.toString());
    } else if (nValue < 1000) {
        return ('0' + nValue.toString());
    } else {
        return (nValue);
    }
}

Кроме того, эта функция жестко закодирована под вашу конкретную задачу (дополнение до 4 цифр), поэтому она не является универсальной.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь