如何通过在个位数前加 0 来格式化数字?

IT技术 javascript number-formatting
2021-02-05 01:02:34

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

JavaScript 中有数字格式化程序吗?

6个回答

编辑(2021):

不再需要像这样手动格式化数字了。这个答案写在遥远的 2011 年,当时 IE 很重要,而 babel 和 bundler 只是一个美好的、充满希望的梦想。

我认为删除这个答案是错误的;但是,如果您发现自己在这里,我想请您注意在本编辑时对这个问题第二高投票答案

它将向您介绍如何使用.toLocaleString()的 options 参数{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);

@KeithPower 那个演示没有说明这一点
2021-03-13 01:02:34
@Galled 通常,根据我的经验,这种格式的格式不需要那种东西,但我已经将涵盖该场景的编辑放在一起。
2021-03-14 01:02:34
@Joseph .75 转换为 75。
2021-03-15 01:02:34
@KeithPower 这是说明上述方法的演示:jsfiddle.net/bkTX3单击该框,更改值,然后单击该框以查看其运行情况。
2021-03-27 01:02:34
也看看.toPrecision()方法w3schools.com/jsref/jsref_toprecision.asp
2021-03-27 01:02:34

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

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

将生成字符串'06'。

在 IE 9 中使用它会创建 6.00 而不是 06。
2021-03-15 01:02:34
有效,但您需要 IE >= 11。
2021-03-26 01:02:34
我完全愿意忽略 IE,但它在移动浏览器中并没有得到很好的支持。源代码:developer.mozilla.org/en/docs/Web/JavaScript/Reference/...
2021-03-26 01:02:34
绝对比用手砍弦要好。更简洁地说,如果您的页面可能在美国境外使用,您可能需要将其调整为:(6).toLocaleString(undefined, {minimumIntegerDigits: 2})
2021-03-27 01:02:34
迄今为止最好的答案!它也处理小数和负数!
2021-04-05 01:02:34

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

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

n( 9); //Returns "09"
n(10); //Returns "10"
n(999);//Returns "999"
负时间呢。0-1:20:00
2021-03-22 01:02:34

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

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
也有负时间的问题。有没有办法解决这个问题?
2021-03-14 01:02:34

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

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

2021-03-13 01:02:34
它也不适用于某些旧版本的节点(可能比节点 8 旧的任何东西)
2021-04-02 01:02:34