如何通过将0前置到个位数来格式化数字?

我想把一个数格式化为两位数。这个问题是在传递0 -9时引起的,所以我需要将它格式化为00 -09

JavaScript中有数字格式化器吗?

549189 次浏览

如果数字大于9,则将数字转换为字符串(一致性)。否则,加一个零。

function n(n){
return n > 9 ? "" + n: "0" + n;
}


n( 9); //Returns "09"
n(10); //Returns "10"
n(999);//Returns "999"

编辑(2021):

不再需要像这样手工格式化数字了。这个答案写在很久以前——在遥远的2011年,那时IE很重要,巴别塔和捆绑器只是一个美好的、充满希望的梦想。

我认为删除这个答案是错误的;然而,如果你发现自己在这里,我想请你注意投票第二高的答案的编辑。

它将向你介绍.toLocaleString()的使用,参数为{minimumIntegerDigits: 2}。令人兴奋的东西。下面我用这个方法从我最初的答案中重新创建了所有三个例子,以方便你。

[7, 7.5, -7.2345].forEach(myNumber => {
let formattedNumber = myNumber.toLocaleString('en-US', {
minimumIntegerDigits: 2,
useGrouping: false
})
console.log(
'Input:    ' + myNumber + '\n' +
'Output:   ' + formattedNumber
)
})


最初的回答:

我发现的最好的方法是这样的:

(注意,这个简单版本只适用于正整数)

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位。相反,它只限制小数左边的数字(整数部分)。(确定符号的行被找到在这里)。

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);

似乎你得到的是一个字符串,而不是一个数字。用这个:

var num = document.getElementById('input').value,
replacement = num.replace(/^(\d)$/, '0$1');
document.getElementById('input').value = replacement;

下面是一个例子:http://jsfiddle.net/xtgFp/

JavaScript没有内置的数字格式化器,但是有一些库可以实现这个功能:

  1. underscore.string提供了一个sprintf函数(以及许多其他有用的格式化程序)
  2. javascript-sprintf,其中下划线。字符串借用。

这是一个简单的数字填充函数,我经常使用。它允许任意数量的填充。

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
("0" + (date.getMonth() + 1)).slice(-2);
("0" + (date.getDay())).slice(-2);

快速和肮脏的一个班轮....

function zpad(n, len) {
return 0..toFixed(len).slice(2,-n.toString().length)+n.toString();
}

这很简单,而且效果很好:

function twoDigit(number) {
var twodigit = number >= 10 ? number : "0"+number.toString();
return twodigit;
}
<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 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) {
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

在任意数字中使用toLocaleString()方法。因此,对于数字6,如下所示,您可以得到所需的结果。

(6).toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false})

将生成字符串'06'。

我知道这是一个古老的帖子,但我想提供一个更灵活和面向对象的解决方案选项。

我已经将接受的答案外推了一点,并扩展了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"

编辑:添加代码以防止截断比要求的数字更长的数字。

注意:这个在IE中已经过时了。使用padStart()代替。

这是我的版本。可以很容易地适应其他场景。

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();
}

这里有一个简单的递归解决方案,适用于任何数量的数字。

function numToNDigitStr(num, n)
{
if(num >=  Math.pow(10, n - 1)) { return num; }
return "0" + numToNDigitStr(num, n-1);
}

如果您的项目中没有lodash,那么仅仅为了使用一个函数而添加整个库将是一种过度。这是我见过的最复杂的解决你问题的方法。

_.padStart(num, 2, '0')

之前答案的改进版本

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 colorOf(r,g,b){
var f = function (x) {
return (x<16 ? '0' : '') + x.toString(16)
};


return "#" +  f(r) + f(g) + f(b);
}

对于任何想要有时间差并得到负数结果的人来说,这是一个很好的例子。垫(3)=“03”,垫(2)= " -02 ",垫(-234)= " -234 "

pad = function(n){
if(n >= 0){
return n > 9 ? "" + n : "0" + n;
}else{
return n < -9 ? "" + n : "-0" + Math.abs(n);
}
}

我的例子是:

<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)

如果你想同时限制你的数字:

function pad2(number) {
number = (number < 10 ? '0' : '') + number;
number = number.substring(0,2);
return number;
}
这也将对任何超过两位数字的值进行剪切。 我一直在fanaur的解决方案上扩展这个

使用这个函数,你可以打印任意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;
};

在所有现代浏览器中都可以使用

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);
}
);

`${number}`.replace(/^(\d)$/, '0$1');

正则表达式是最好的。

Javascript中的AS数据类型是动态确定的,它将04视为4 如果值小于10,则使用条件语句,然后在其前面加上0,使其字符串 例如,< / >

var x=4;
x = x<10?"0"+x:x
console.log(x); // 04

@Lifehack的回答对我很有用;我想我们可以用一行来表示正数

 String(input).padStart(2, '0');

我建立了一个非常简单的格式函数,每当我需要一个简单的日期格式化时,我就调用它。当数字小于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;
}
}

这里有一个非常简单的解决方法,对我来说很有效。

首先声明一个变量来保存你的号码。

var number;

现在将数字转换为字符串,并将其保存在另一个变量中;

var numberStr = number.toString();

现在你可以测试这个字符串的长度,如果它小于你想要的长度,你可以在开头追加一个' 0 '。

if(numberStr.length < 2){
number = '0' + number;
}

现在根据需要使用数字

console.log(number);

这是我发现的最简单的解决方法:-

let num = 9; // any number between 0 & 99
let result = ( '0' + num ).substr( -2 );

为ES6箭头函数更新(几乎所有现代浏览器都支持,参见CanIUse)

const formatNumber = n => ("0" + n).slice(-2);

我的例子是这样的

         var n =9;
var checkval=('00'+n).slice(-2);
console.log(checkval)

并且输出是09

这是一个老问题,但我想补充一下。在现代浏览器中,你可以使用repeat来简化正数格式:

('0'.repeat(digits - 1) + num).substr(-digits)

如果你想要支持IE并且知道最大数字数(例如,10位):

('000000000' + num).substr(-digits)

对于负整数:

(num < 0 ? '-' : '') + ('000000000' + Math.abs(num)).substr(-digits)

为正数显式+:

['-', '', '+'][Math.sign(num) + 1] + ('000000000' + Math.abs(num)).substr(-digits)

我的版本:

`${Math.trunc(num / 10)}${Math.trunc(num % 10)}`;

const func = (num) => `${Math.trunc(num / 10)}${Math.trunc(num % 10)}`;


const nums = [1, 3, 5, 6, 8, 9, 10, 20, 56, 80];
nums.forEach(num => console.log(func(num)));

这是一个非常好的和简短的解决方案:

smartTime(time) {
return time < 10 ? "0" + time.toString().trim() : time;
}

你可以使用padStart方法:

更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart

请看这个例子:

function n(num, len = 2) {
return `${num}`.padStart(len, '0');
}


console.log(n( 9));   //print "09"
console.log(n(10));   //print "10"
console.log(n(999));  //print "999"
console.log(n(999,6));//print "000999"

你也可以使用Intl一个ECMAScript国际API,它可以像这样简单地自定义你的号码

let Number= Intl.NumberFormat('en-US', {
minimumIntegerDigits: 2,
minimumFractionDigits: 2
});


console.log(Number.format(2));
//02.00

和许多具有Intl的嵌入式函数,你可以放一个前缀符号,符号和货币格式等文档,只需单击在这里