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



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 и просто использовать выражение
  • Чтобы получить тело функции до одной строки, я обманул и использовал тройное выражение
Question

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

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

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

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



Для удовольствия вместо использования цикла для создания дополнительных нулей:

function zeroPad(n,length){
  var s=n+"",needed=length-s.length;
  if (needed>0) s=(Math.pow(10,needed)+"").slice(1)+s;
  return s;
}



Забавно, мне недавно пришлось это сделать.

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"

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






Related