在JavaScript中推荐的零填充方法是什么?我想我可以构建一个自定义函数来填充零到类型转换的值,但我想知道是否有更直接的方法来做到这一点?
注意:这里的“zeroffilled”指的是数据库意义上的单词(其中数字5的6位零填充表示形式将是“000005”)。
在JavaScript中推荐的零填充方法是什么?我想我可以构建一个自定义函数来填充零到类型转换的值,但我想知道是否有更直接的方法来做到这一点?
注意:这里的“zeroffilled”指的是数据库意义上的单词(其中数字5的6位零填充表示形式将是“000005”)。
当前回答
我觉得我的方法有点不同。我需要填充一个数字的原因是在<pre>元素(屏幕日志的一部分)中显示它,所以它最终将是一个字符串。我没有做任何数学运算,而是写了一个简单的函数来覆盖一个掩码字符串上的字符串值:
function overlayr(m, s) {
return m.length > s.length ? m.substr(0, m.length - s.length) + s : s;
}
这样做的好处是,我可以将它用于各种字符串对齐任务。要调用它,只需传入掩码和数字作为字符串:
> overlayr('00000', (5).toString())
< "00005"
作为一个额外的好处,它可以正确地处理溢出:
> overlayr('00000', (555555).toString())
< "555555"
当然它不局限于0填充:
> overlayr('*****', (55).toString())
< "***55"
其他回答
如果填充数事先知道不超过某个值,还有另一种不循环的方法:
var fillZeroes = "00000000000000000000"; // max number of zero fill ever asked for in global
function zeroFill(number, width) {
// make sure it's a string
var input = number + "";
var prefix = "";
if (input.charAt(0) === '-') {
prefix = "-";
input = input.slice(1);
--width;
}
var fillAmt = Math.max(width - input.length, 0);
return prefix + fillZeroes.slice(0, fillAmt) + input;
}
测试用例在这里:http://jsfiddle.net/jfriend00/N87mZ/
数学的力量!
X = integer to pad Y =要填充的零的个数
function zeroPad(x, y)
{
y = Math.max(y-1,0);
var n = (x / Math.pow(10,y)).toFixed(y);
return n.replace('.','');
}
我使用
Utilities.formatString("%04d", iThe_TWO_to_FOUR_DIGIT)
哪个前导有4个0
注:这需要谷歌的应用程序脚本实用程序:
https://developers.google.com/apps-script/reference/utilities/utilities#formatstringtemplate-args
可变长度填充功能:
function addPaddingZeroes(value, nLength)
{
var sValue = value + ''; // Converts to string
if(sValue.length >= nLength)
return sValue;
else
{
for(var nZero = 0; nZero < nLength; nZero++)
sValue = "0" + sValue;
return (sValue).substring(nLength - sValue.length, nLength);
}
}
我对这个话题的一点贡献(https://gist.github.com/lucasferreira/a881606894dde5568029):
/* Autor: Lucas Ferreira - http://blog.lucasferreira.com | Usage: fz(9) or fz(100, 7) */
function fz(o, s) {
for(var s=Math.max((+s||2),(n=""+Math.abs(o)).length); n.length<s; (n="0"+n));
return (+o < 0 ? "-" : "") + n;
};
用法:
fz(9) & fz(9, 2) == "09"
fz(-3, 2) == "-03"
fz(101, 7) == "0000101"
我知道,这是一个很脏的函数,但它很快,即使是负数也能工作;)