在JavaScript中推荐的零填充方法是什么?我想我可以构建一个自定义函数来填充零到类型转换的值,但我想知道是否有更直接的方法来做到这一点?
注意:这里的“zeroffilled”指的是数据库意义上的单词(其中数字5的6位零填充表示形式将是“000005”)。
在JavaScript中推荐的零填充方法是什么?我想我可以构建一个自定义函数来填充零到类型转换的值,但我想知道是否有更直接的方法来做到这一点?
注意:这里的“zeroffilled”指的是数据库意义上的单词(其中数字5的6位零填充表示形式将是“000005”)。
当前回答
事实上,我最近不得不想出一些类似的东西。 我想肯定有一种不用循环的方法。
这是我想到的。
function zeroPad(num, numZeros) {
var n = Math.abs(num);
var zeros = Math.max(0, numZeros - Math.floor(n).toString().length );
var zeroString = Math.pow(10,zeros).toString().substr(1);
if( num < 0 ) {
zeroString = '-' + zeroString;
}
return zeroString+n;
}
然后使用它提供一个数字到零pad:
> zeroPad(50,4);
"0050"
如果该数字大于填充,则该数字将扩展到填充之外:
> zeroPad(51234, 3);
"51234"
小数也可以!
> zeroPad(51.1234, 4);
"0051.1234"
如果你不介意污染全局命名空间,你可以直接将它添加到Number:
Number.prototype.leftZeroPad = function(numZeros) {
var n = Math.abs(this);
var zeros = Math.max(0, numZeros - Math.floor(n).toString().length );
var zeroString = Math.pow(10,zeros).toString().substr(1);
if( this < 0 ) {
zeroString = '-' + zeroString;
}
return zeroString+n;
}
如果你想让小数在填充中占据空间:
Number.prototype.leftZeroPad = function(numZeros) {
var n = Math.abs(this);
var zeros = Math.max(0, numZeros - n.toString().length );
var zeroString = Math.pow(10,zeros).toString().substr(1);
if( this < 0 ) {
zeroString = '-' + zeroString;
}
return zeroString+n;
}
干杯!
XDR提出了一个对数变化,似乎表现更好。
警告:如果num = 0(例如zeropad(0,2)),该函数将失败。
function zeroPad (num, numZeros) {
var an = Math.abs (num);
var digitCount = 1 + Math.floor (Math.log (an) / Math.LN10);
if (digitCount >= numZeros) {
return num;
}
var zeroString = Math.pow (10, numZeros - digitCount).toString ().substr (1);
return num < 0 ? '-' + zeroString + an : zeroString + an;
}
说到性能,tomsmeding比较了前3个答案(4与对数变化)。猜猜哪一个的表现比另外两个好?:)
其他回答
还有另一个版本:
function zPad(s,n){
return (new Array(n+1).join('0')+s).substr(-Math.max(n,s.toString().length));
}
我的解决方案
Number.prototype.PadLeft = function (length, digit) {
var str = '' + this;
while (str.length < length) {
str = (digit || '0') + str;
}
return str;
};
使用
var a = 567.25;
a.PadLeft(10); // 0000567.25
var b = 567.25;
b.PadLeft(20, '2'); // 22222222222222567.25
我们的测试是假的,因为我的有个错别字。
zeroPad = function (num, count) {
return ((num / Math.pow(10, count)) + '').substr(2);
};
Paul的是最快的,但我认为.substr比.slice快,即使它多了一个字符;)
post,如果这是你正在寻找的,将剩余的时间以毫秒为单位转换为字符串,如00:04:21
function showTimeRemaining(remain){
minute = 60 * 1000;
hour = 60 * minute;
//
hrs = Math.floor(remain / hour);
remain -= hrs * hour;
mins = Math.floor(remain / minute);
remain -= mins * minute;
secs = Math.floor(remain / 1000);
timeRemaining = hrs.toString().padStart(2, '0') + ":" + mins.toString().padStart(2, '0') + ":" + secs.toString().padStart(2, '0');
return timeRemaining;
}
事实上,我最近不得不想出一些类似的东西。 我想肯定有一种不用循环的方法。
这是我想到的。
function zeroPad(num, numZeros) {
var n = Math.abs(num);
var zeros = Math.max(0, numZeros - Math.floor(n).toString().length );
var zeroString = Math.pow(10,zeros).toString().substr(1);
if( num < 0 ) {
zeroString = '-' + zeroString;
}
return zeroString+n;
}
然后使用它提供一个数字到零pad:
> zeroPad(50,4);
"0050"
如果该数字大于填充,则该数字将扩展到填充之外:
> zeroPad(51234, 3);
"51234"
小数也可以!
> zeroPad(51.1234, 4);
"0051.1234"
如果你不介意污染全局命名空间,你可以直接将它添加到Number:
Number.prototype.leftZeroPad = function(numZeros) {
var n = Math.abs(this);
var zeros = Math.max(0, numZeros - Math.floor(n).toString().length );
var zeroString = Math.pow(10,zeros).toString().substr(1);
if( this < 0 ) {
zeroString = '-' + zeroString;
}
return zeroString+n;
}
如果你想让小数在填充中占据空间:
Number.prototype.leftZeroPad = function(numZeros) {
var n = Math.abs(this);
var zeros = Math.max(0, numZeros - n.toString().length );
var zeroString = Math.pow(10,zeros).toString().substr(1);
if( this < 0 ) {
zeroString = '-' + zeroString;
}
return zeroString+n;
}
干杯!
XDR提出了一个对数变化,似乎表现更好。
警告:如果num = 0(例如zeropad(0,2)),该函数将失败。
function zeroPad (num, numZeros) {
var an = Math.abs (num);
var digitCount = 1 + Math.floor (Math.log (an) / Math.LN10);
if (digitCount >= numZeros) {
return num;
}
var zeroString = Math.pow (10, numZeros - digitCount).toString ().substr (1);
return num < 0 ? '-' + zeroString + an : zeroString + an;
}
说到性能,tomsmeding比较了前3个答案(4与对数变化)。猜猜哪一个的表现比另外两个好?:)