在JavaScript中用前导零填充数字
在JavaScript中,我需要填充 例如,如果我有数字9,它将是“0009”。如果我有一个数字,比如说10,它将是“0010”。请注意它如何始终包含四位数字 一种方法是将数字减去4,得到需要输入的0的数量 有更巧妙的方法吗?试试:在JavaScript中用前导零填充数字,javascript,formatting,Javascript,Formatting,在JavaScript中,我需要填充 例如,如果我有数字9,它将是“0009”。如果我有一个数字,比如说10,它将是“0010”。请注意它如何始终包含四位数字 一种方法是将数字减去4,得到需要输入的0的数量 有更巧妙的方法吗?试试: String.prototype.lpad = function(padString, length) { var str = this; while (str.length < length) str = padString
String.prototype.lpad = function(padString, length) {
var str = this;
while (str.length < length)
str = padString + str;
return str;
}
在2017年ECMAScript中,我们有了新的方法,其语法如下 所以现在我们可以使用
const str = "5";
str.padStart(4, "0"); // "0005"
功能焊盘四(编号){
if(number number
是一个箭头函数,除其他外,它取代了函数
,并以其参数作为前缀
number=>
)return
开头,则可以省略大括号和return
关键字,只需使用表达式即可n=9;
字符串(n).padStart(4,'0');/'0009'
n=10;
字符串(n).padStart(4,'0');//'0010'
到目前为止,没有太多的“滑头”:
function pad(n, width, z) {
z = z || '0';
n = n + '';
return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
}
当您使用数字初始化数组时,它会创建一个将
长度设置为该值的数组,以便该数组似乎包含那么多未定义的元素。尽管某些数组实例方法跳过没有值的数组元素,.join()
没有,或者至少不完全;它将它们视为其值是空字符串。因此,在每个数组元素之间都会得到零字符(或任意“z”)的副本;这就是为什么其中有一个+1
用法示例:
pad(10, 4); // 0010
pad(9, 4); // 0009
pad(123, 4); // 0123
pad(10, 4, '-'); // --10
这并不是很“圆滑”,但对每个填充0
执行整数运算比字符串串联要快
function ZeroPadNumber ( nValue )
{
if ( nValue < 10 )
{
return ( '000' + nValue.toString () );
}
else if ( nValue < 100 )
{
return ( '00' + nValue.toString () );
}
else if ( nValue < 1000 )
{
return ( '0' + nValue.toString () );
}
else
{
return ( nValue );
}
}
函数ZeroPadNumber(nValue)
{
如果(n值<10)
{
返回('000'+nValue.toString());
}
否则如果(n值<100)
{
返回('00'+nValue.toString());
}
否则如果(n值<1000)
{
返回('0'+nValue.toString());
}
其他的
{
返回值(nValue);
}
}
此函数还根据您的特殊需要硬编码(4位填充),因此它不是通用的。为了好玩,而不是使用循环来创建额外的零:
function zeroPad(n,length){
var s=n+"",needed=length-s.length;
if (needed>0) s=(Math.pow(10,needed)+"").slice(1)+s;
return s;
}
你可以这样做:
function pad ( num, size ) {
return ( Math.pow( 10, size ) + ~~num ).toString().substring( 1 );
}
编辑:这只是函数的一个基本概念,但要增加对较大数字(以及无效输入)的支持,这可能会更好:
function pad ( num, size ) {
if (num.toString().length >= size) return num;
return ( Math.pow( 10, size ) + Math.floor(num) ).toString().substring( 1 );
}
这有两件事:
如果数字大于指定的大小,它将简单地返回数字
使用Math.floor(num)
代替~~num
将支持较大的数字
你说过你有电话号码-
String.prototype.padZero= function(len, c){
var s= '', c= c || '0', len= (len || 2)-this.length;
while(s.length<len) s+= c;
return s+this;
}
Number.prototype.padZero= function(len, c){
return String(this).padZero(len,c);
}
String.prototype.padZero=函数(len,c){
变量s='',c=c | |“0”,len=(len | | 2)-this.length;
虽然(s.length自从你提到它的长度总是为4,我不会做任何错误检查来使它光滑。)
想法:简单地用提供的数字替换“0000”…问题是,如果输入
为0,我需要硬编码它以返回“0000”。LOL
这应该足够光滑了
JSFiddler:有趣的是,我最近不得不这么做
function padDigits(number, digits) {
return Array(Math.max(digits - String(number).length + 1, 0)).join(0) + number;
}
使用类似于:
padDigits(9, 4); // "0009"
padDigits(10, 4); // "0010"
padDigits(15000, 4); // "15000"
不漂亮,但很有效。新数组(需要+1)。加入('0')
而不是昂贵的求幂法?:-)注意,在数字转换为科学记数法之前,这只适用于低于某个大小的长度。Pointy的数组用法通常更有效。(@Pointy:因为这只是为了好玩:)是的,我知道。这是数组构造函数唯一合法的用法,因此值得一提:-)为了完整起见,您应该从最后一个字符串中提取最后一个长度字符,以处理padString
是多个符号的情况。您这样做,5.lpad(“-”,4)
将产生“--5
”而不是“--5
"。不建议将字符串原型扩展为任何其他内置组件。+1用于指出ES8解决方案。这里描述了一个简单的多填充:ES8解决方案应该是当今解决这一问题的答案。你应该将其放在答案的顶部。它很简单,但没有那么新颖;我最近不得不做一些类似的事情,并发现这种方法nline。只进行了投票,因为这不是一种模块化方法(仅适用于4位数字)。当然,它是对特定问题的特定答案,但包含长度选项会更好(与其他答案一样)。我喜欢slice的用法。但是,正如@doubleJ所提到的,请注意,这种方法的一个限制是将数字截断到最后4位。实际上@Jorgorpinel它不会截断。if语句导致slice操作仅对4位或更少数字进行操作。一个5位数字的值至少为10000,这不是。我认为自从sprintf(padToFour,“%04d”,number);
@doubleJ-Pointy's和我的非常相似,如果不是完全相同的话,除了他的特征是能够用0以外的东西进行填充。你可以用他喜欢的pad(15,3)
与我的使用方式大致相同。我首先将num转换为str,然后使用返回(数组(Math.max(5-str.length,0)).join(“0”)+str);
,如果另一个Q被删除,只需删除它。要处理负数,请使用该数字的绝对值,然后在最终结果上加上负号('-')。(数字<0?“-”:“”)+数组(Math.max(数字-字符串(值).length+1,0)).join(0)+value
其中'value'是Math.abs(数字)
。我非常喜欢这个解决方案@NeilMonroe,
function pad ( num, size ) {
if (num.toString().length >= size) return num;
return ( Math.pow( 10, size ) + Math.floor(num) ).toString().substring( 1 );
}
String.prototype.padZero= function(len, c){
var s= '', c= c || '0', len= (len || 2)-this.length;
while(s.length<len) s+= c;
return s+this;
}
Number.prototype.padZero= function(len, c){
return String(this).padZero(len,c);
}
function pad(input) {
var BASE = "0000";
return input ? BASE.substr(0, 4 - Math.ceil(input / 10)) + input : BASE;
}
function padDigits(number, digits) {
return Array(Math.max(digits - String(number).length + 1, 0)).join(0) + number;
}
padDigits(9, 4); // "0009"
padDigits(10, 4); // "0010"
padDigits(15000, 4); // "15000"