Как форматировать числа, добавляя 0 к однозначным числам?
Я хочу отформатировать число, чтобы иметь две цифры. Проблема возникает, когда 0
-9
передается, поэтому мне нужно, чтобы он был отформатирован в 00
-09
.
есть ли форматирование чисел в JavaScript?
27 ответов:
лучший метод, который я нашел, это что-то вроде следующего (обратите внимание, что эта простая версия работает только для положительных целых чисел):
var myNumber = 7; var formattedNumber = ("0" + myNumber).slice(-2); console.log(formattedNumber);
для десятичных знаков, вы можете использовать этот код (это немного небрежно, хотя).
var myNumber = 7.5; var dec = myNumber - Math.floor(myNumber); myNumber = myNumber - dec; var formattedNumber = ("0" + myNumber).slice(-2) + dec.toString().substr(1); console.log(formattedNumber);
наконец, если вам приходится иметь дело с возможностью отрицательных чисел, лучше всего сохранить знак, применить форматирование к абсолютному значению числа и повторно применить знак после факт. Обратите внимание, что этот метод не ограничивает число до 2 полных цифр. Вместо этого он только ограничивает число слева от десятичной запятой (целая часть). (Линия, определяющая знак, была найдена здесь:количество.sign () в javascript)
var myNumber = -7.2345; var sign = myNumber?myNumber<0?-1:1:0; myNumber = myNumber * sign + ''; // poor man's absolute value var dec = myNumber.match(/\.\d+$/); var int = myNumber.match(/^[^\.]+/); var formattedNumber = (sign < 0 ? '-' : '') + ("0" + int).slice(-2) + (dec !== null ? dec : ''); console.log(formattedNumber);
если число больше 9, преобразуйте его в строку (согласованность). В противном случае, добавьте ноль.
function n(n){ return n > 9 ? "" + n: "0" + n; } n( 9); //Returns "09" n(10); //Returns "10" n(999);//Returns "999"
используйте метод toLocaleString () в любом количестве. Поэтому для числа 6, как показано ниже, можно получить желаемые результаты.
(6).toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false})
будет генерировать строку '06'.
вот простая функция заполнения чисел, которую я обычно использую. Он позволяет для любого количества прокладки.
function leftPad(number, targetLength) { var output = number + ''; while (output.length < targetLength) { output = '0' + output; } return output; }
примеры:
leftPad(1, 2) // 01 leftPad(10, 2) // 10 leftPad(100, 2) // 100 leftPad(1, 3) // 001 leftPad(1, 8) // 00000001
во всех современных браузерах, вы можете использовать
numberStr.padStart(2, "0");
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart
function zeroPad(numberStr) { return numberStr.padStart(2, "0"); } var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; numbers.forEach( function(num) { var numString = num.toString(); var paddedNum = zeroPad(numString); console.log(paddedNum); } );
вы можете сделать:
function pad2(number) { return (number < 10 ? '0' : '') + number }
пример:
document.write(pad2(0) + '<br />'); document.write(pad2(1) + '<br />'); document.write(pad2(2) + '<br />'); document.write(pad2(10) + '<br />'); document.write(pad2(15) + '<br />');
результат:
00 01 02 10 15
Кажется, у вас может быть строка, а не число. используйте это:
var num = document.getElementById('input').value, replacement = num.replace(/^(\d)$/, '0'); document.getElementById('input').value = replacement;
вот пример:http://jsfiddle.net/xtgFp/
Это просто и работает довольно хорошо:
function twoDigit(number) { var twodigit = number >= 10 ? number : "0"+number.toString(); return twodigit; }
быстрый и грязный вкладыш....
function zpad(n, len) { return 0..toFixed(len).slice(2,-n.toString().length)+n.toString(); }
Я знаю, что это древний пост, но я хотел предоставить более гибкий и OO вариант решения.
Я немного экстраполировал принятый ответ и расширил javascript
Number
объект для обеспечения регулируемого нулевого заполнения:Number.prototype.zeroPad = function(digits) { var loop = digits; var zeros = ""; while (loop) { zeros += "0"; loop--; } return (this.toString().length > digits) ? this.toString() : (zeros + this).slice(-digits); } var v = 5; console.log(v.zeroPad(2)); // returns "05" console.log(v.zeroPad(4)); // returns "0005"
Edit: добавить код, чтобы предотвратить отсечение номера дольше, чем запрошенные цифры.
Примечание: это устарело во всех, кроме IE. Используйте
padStart()
вместо.
для JavaScript нет встроенного средства форматирования чисел, но есть некоторые библиотеки, которые выполняют это:
- подчеркивания.строка предоставляет функцию sprintf (наряду со многими другими полезными форматерами)
- javascript-sprintf, которые подчеркивают.строка заимствует от.
улучшенная версия предыдущего ответа
function atLeast2Digit(n){ n = parseInt(n); //ex. if already passed '05' it will be converted to number 5 var ret = n > 9 ? "" + n: "0" + n; return ret; } alert(atLeast2Digit(5));
или
function zpad(n,l){ return rep(l-n.toString().length, '0') + n.toString(); }
С
function rep(len, chr) { return new Array(len+1).join(chr); }
Если вы хотите ограничить свои цифры одновременно:
function pad2(number) { number = (number < 10 ? '0' : '') + number; number = number.substring(0,2); return number; }
Это также будет отбивать любое значение, которое превышает две цифры. Я распространяю это на решение фанаура.
@Lifehack ответ был очень полезен для меня; где я думаю, что мы можем сделать это в одной строке для положительных чисел
String(input).padStart(2, '0');
<html> <head> <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script> <script type="text/javascript"> $(document).ready(function(){ $('#test').keypress(allowOnlyTwoPositiveDigts); }); function allowOnlyTwoPositiveDigts(e){ var test = /^[\-]?[0-9]{1,2}?$/ return test.test(this.value+String.fromCharCode(e.which)) } </script> </head> <body> <input id="test" type="text" /> </body> </html>
вот простое рекурсивное решение, которое работает для любого количества цифр.
function numToNDigitStr(num, n) { if(num >= Math.pow(10, n - 1)) { return num; } return "0" + numToNDigitStr(num, n-1); }
вот моя версия. Может быть легко адаптирована к другим сценариям.
function setNumericFormat(value) { var length = value.toString().length; if (length < 4) { var prefix = ""; for (var i = 1; i <= 4 - length; i++) { prefix += "0"; } return prefix + value.toString(); } return value.toString(); }
Если у вас нет lodash в вашем проекте, это будет излишним, чтобы добавить всю библиотеку только для использования одной функции. Это самое сложное решение вашей проблемы, которое я когда-либо видел.
_.padStart(num, 2, '0')
function colorOf(r,g,b){ var f = function (x) { return (x<16 ? '0' : '') + x.toString(16) }; return "#" + f(r) + f(g) + f(b); }
для тех, кто хочет иметь разницу во времени и иметь результаты, которые могут принимать отрицательные числа, здесь хороший. pad (3) = "03", pad(-2) = "-02", pad(-234) = "-234"
pad = function(n){ if(n >= 0){ return n > 9 ? "" + n : "0" + n; }else{ return n < -9 ? "" + n : "-0" + Math.abs(n); } }
С помощью этой функции вы можете печатать с любого из N цифр требуется
function frmtDigit(num, n) { isMinus = num < 0; if (isMinus) num *= -1; digit = ''; if (typeof n == 'undefined') n = 2;//two digits for (i = 1; i < n; i++) { if (num < (1 + Array(i + 1).join("0"))) digit += '0'; } digit = (isMinus ? '-' : '') + digit + num; return digit; };
мой пример будет:
<div id="showTime"></div> function x() { var showTime = document.getElementById("showTime"); var myTime = new Date(); var hour = myTime.getHours(); var minu = myTime.getMinutes(); var secs = myTime.getSeconds(); if (hour < 10) { hour = "0" + hour }; if (minu < 10) { minu = "0" + minu }; if (secs < 10) { secs = "0" + secs }; showTime.innerHTML = hour + ":" + minu + ":" + secs; } setInterval("x()", 1000)
поскольку тип данных в Javascript определяется динамически, он обрабатывает 04 как 4 Используйте условный оператор, если значение меньше 10, а затем добавьте 0 перед ним, сделав его строкой например,
var x=4; x = x<10?"0"+x:x console.log(x); // 04
Я построил довольно простую функцию форматирования, которую я вызываю всякий раз, когда мне нужен простой формат даты. Он имеет дело с форматированием одинарных цифр до двойных цифр, когда они меньше 10. Он выбивает дату в формате
Sat Sep 29 2018 - 00:05:44
эта функция используется как часть переменной utils, поэтому она называется:
let timestamp = utils._dateFormatter('your date string'); var utils = { _dateFormatter: function(dateString) { let d = new Date(dateString); let hours = d.getHours(); let minutes = d.getMinutes(); let seconds = d.getSeconds(); d = d.toDateString(); if (hours < 10) { hours = '0' + hours; } if (minutes < 10) { minutes = '0' + minutes; } if (seconds < 10) { seconds = '0' + seconds; } let formattedDate = d + ' - ' + hours + ':' + minutes + ':' + seconds; return formattedDate; } }