设置数字格式,长度正好为二

Format a Number, Exactly Two in Length?

本文关键字:数字 格式 设置      更新时间:2023-09-26

我有一个小于100的整数,并用JavaScript打印到HTML页面。如何格式化整数,使其正好有两位数长?例如:

01
02
03

09
10
11
12

更新

这个答案写于2011年。2021年版本见刘变涛的回答。

原件

function pad(d) {
    return (d < 10) ? '0' + d.toString() : d.toString();
}
pad(1);  // 01
pad(9);  // 09
pad(10); // 10
String("0" + x).slice(-2);

其中x是您的号码。

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

String(number).padStart(2, '0')

只需使用以下简短函数即可获得所需结果:

function pad2(number) {
    return (number < 10 ? '0' : '') + number
}

在Javascript中向左填充数字的一种直接方法是以10为基数计算位数。例如:

function padLeft(positiveInteger, totalDigits) {
  var padding = "00000000000000";
  var rounding = 1.000000000001;
  var currentDigits = positiveInteger > 0 ? 1 + Math.floor(rounding * (Math.log(positiveInteger) / Math.LN10)) : 1;
  return (padding + positiveInteger).substr(padding.length - (totalDigits - currentDigits));
}

舍入因子解决了无法获得10次方的精确对数的问题,例如Math.log(1000(/Math.LN10==2.9999999999999996当然,应该添加参数验证。

// Return a string padded
function FormatMe(n) {
   return (n<10) ? '0'+n : n;
}

function leftFillNum(num, targetLength) {
  return num.toString().padStart(targetLength, '0');
}
console.log(leftFillNum(3,2)); // ==> returns '03'
console.log(leftFillNum(33,2)); // ==> returns '33'
console.log(leftFillNum(3,4)); // ==> returns '0003'
console.log(leftFillNum(33,5)); // ==> returns '00033'

function padLeft(a, b) {
    var l = (a + '').length;
    if (l >= b) {
        return a + '';
    } else {
        var arr = [];
        for (var i = 0; i < b - l ;i++) {
            arr.push('0');
        }
        arr.push(a);
        return arr.join('');
    }
}

我通常使用这个函数。

function pad(n, len) {
    let l = Math.floor(len)
    let sn = '' + n
    let snl = sn.length
    if(snl >= l) return sn
    return '0'.repeat(l - snl) + sn
}


使用示例

pad(1, 1)    // ==> returns '1' (string type)
pad(384, 5)  // ==> returns '00384'
pad(384, 4.5)// ==> returns '0384'
pad(5555, 2) // ==> returns '5555'
const threeDigit = num => num.toString().padStart(3 , '0');

函数将数字转换为字符串,然后返回数字的三位数版本

我使用regex来格式化我的时间,例如

const str='12:5'

const final=str.replace(/''d+/g,(match,offset,string(=>match<10?'0'+匹配:匹配(

输出:12:05

以前答案的改进版本:

var result = [...Array(12)].map((_, i) => zeroFill(i + 1, 2));
function zeroFill(num, size) {
  let s = num + '';
  while (s.length < size) s = `0${s}`;
  return s;
}
console.log(result)

lodash有padStart,https://lodash.com/docs/4.17.15#padStart

padStart(1,2,'0'(它将填充1=>01,它不会处理负数,因为-将被视为填充

显示了一个示例,以确保999以内的每个数字的长度为3,该代码不言自明且简单

            function formatter(d) {
              if (d < 1000) {
                if (d < 10) {
                  return `00${d}`;
                } else if (d < 100) {
                  return `0${d}`;
                } else {
                  return `${d}`;
                }
              } else {
                return `Enter valid number`;
              }
            }