Введите число с ведущими нулями в JavaScript




4 Answers

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

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

Бонусная непонятная, но гладкая однострочная версия ES6:

let padToFour = number => number <= 9999 ? ("000"+number).slice(-4) : number;

ES6isms:

  • let это переменная с областью действия (в отличие от функционального охвата var )
  • => - функция стрелки, которая, среди прочего, заменяет function и добавляется ее параметрами
  • Если функция стрелки принимает единственный параметр, вы можете опустить скобки (следовательно, number => )
  • Если тело функции стрелки имеет одну строку, которая начинается с return вы можете опустить фигурные скобки и ключевое слово return и просто использовать выражение
  • Чтобы получить тело функции до одной строки, я обманул и использовал тройное выражение
javascript formatting

Возможный дубликат:
Как создать Zerofilled значение с помощью JavaScript?

В JavaScript мне нужно иметь отступы.

Например, если у меня есть номер 9, это будет «0009». Если у меня будет число 10, это будет «0010». Обратите внимание, как он всегда будет содержать четыре цифры.

Один из способов сделать это - вычесть число минус 4, чтобы получить число 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"

Не красиво, но эффективно.




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

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 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-разрядная прокладка), поэтому она не является общей.




Related