Javascript中的String.Format函数?

5
在C#中,每当我想打印两位数时,我都会使用:
int digit=1;
Console.Write(digit.ToString("00"));

我该怎样在Javascript中执行相同的操作呢?
谢谢。

可能是Javascript printf/string.format的重复问题。 - Jerod Venema
4个回答

14

c# digit.toString("00")digit左侧添加了一个零(左填充)。在javascript中,我使用以下函数执行此操作:

function zeroPad(nr,base){
  var  len = (String(base).length - String(nr).length)+1;
  return len > 0? new Array(len).join('0')+nr : nr;
}
zeroPad(1,10);   //=> 01
zeroPad(1,100);  //=> 001
zeroPad(1,1000); //=> 0001

您也可以将其重写为Number的扩展:

Number.prototype.zeroPad = Number.prototype.zeroPad || 
     function(base){
       var nr = this, len = (String(base).length - String(nr).length)+1;
       return len > 0? new Array(len).join('0')+nr : nr;
    };
 //usage:
(1).zeroPad(10);   //=> 01
(1).zeroPad(100);  //=> 001
(1).zeroPad(1000); //=> 0001

[2021年10月更新]

静态的 ES20xx Number 方法,也适用于负数。

Number.padLeft = (nr, len = 2, padChr = `0`) => 
  `${nr < 0 ? `-` : ``}${`${Math.abs(nr)}`.padStart(len, padChr)}`;
console.log(Number.padLeft(3));
console.log(Number.padLeft(284, 5));
console.log(Number.padLeft(-32, 12));
console.log(Number.padLeft(-0)); // Note: -0 is not < 0


需要注意的是,这个方法不能处理负数,也就是说,它只能处理正数。(我之所以提醒一下是因为我曾经在寻找一个能够同时处理负数的类似格式化工具。) - Thomas Tempelmann
我想指出的是,8年后,padStart的功能以及主流浏览器的支持情况。 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/padStart - jrasm91

2

我通常会做类似这样的事情:("00000000"+nr).slice(-base),其中nr是数字,base是你想要最终得到的位数。

最初的回答(Original Answer)


1
一种方法是下载JavaScript的sprintf,然后编写类似以下代码的内容:
int i = 1;
string s = sprintf("%02d", i);
document.write(s); // Prints "01"

-1
var num =10
document.write(num);

但是如果你的问题是要使用两位数两次,那么你可以使用这个

var num1 = 10;
var num2 = 20;
var resultStr = string.concat(num1,num2);
document.write(resultStr);
...
Result: 1020

如果你想要在它们之间有空格,

var resultStr = string.concat(num1,"",num2);

希望这能帮到你...


1
我认为op想要的是如果数字小于10,则填充数字,因此1变成字符串01或001。 - Hubro
这并没有帮助,因为它没有解决字符串格式化的问题。(例如,操作员想要类似于i=1 ==> "01"的东西) - nfechner
不好意思,你理解错了。你的回答与字符串填充无关。 - Hubro
@codemonkey:在你发第一条评论之前,我正在修改代码,所以没法看到它。在保存后,页面刷新时出现了你的评论。所以并不是我没有理解。我已经正确地理解了。还是谢谢你。 - Anubhav Ranjan
你还没有理解。你的回答仍然与字符串填充无关。OP正在寻找一种方法来使用零填充字符串以确保固定长度。例如,1变成“001”。 - Hubro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接