【问题标题】:JavaScript format number to day with always 3 digits [duplicate]JavaScript 格式数字,始终为 3 位数字[重复]
【发布时间】:2012-06-06 04:37:30
【问题描述】:

可能重复:
How can I create a Zerofilled value using JavaScript?

我必须输出一个必须始终包含 3 位数字的天数。它必须写成 003,而不是 3,而不是 12,它必须写成 012。如果大于 100 则不格式化输出。 我想知道是否有我可以使用的正则表达式或一些快速的内联脚本,或者我必须创建一个应该这样做并返回结果的函数。谢谢!

【问题讨论】:

标签: javascript numbers format digits days


【解决方案1】:

这是一个简单的函数,用零填充数字到一定宽度:

function zeroFill(number, width) {
    width -= number.toString().length;
    if(width > 0) {
        return new Array(width + (/\./.test(number) ? 2 : 1)).join('0') + number;
    }
    return number + ""; // always return a string
}

(来自How can I pad a value with leading zeros?

由于原始答案没有解释该功能的工作原理,我将在这里进行。

width 最初包含您想要的总长度,因此 width - number_of_digits 是必要的填充字符数。
new Array(len + 1).join(str) 重复 str len 次。
正则表达式用于在数字包含小数点的情况下添加额外的填充零,因为该点也包含在使用 number.toString().length 确定的 number_of_digits

【讨论】:

    【解决方案2】:

    一种可能的解决方案:

    ​while ((val+"").length < 3​) {
        val = "0" + val;
    }
    

    演示: http://jsfiddle.net/WfXVn/

    【讨论】:

      【解决方案3】:

      怎么样:

       zeroFilled = ('000' + x).substr(-3)
      

      对于任意宽度:

       zeroFilled = (new Array(width).join('0') + x).substr(-width)
      

      根据 cmets,这似乎更准确:

      lpad = function(s, width, char) {
          return (s.length >= width) ? s : (new Array(width).join(char) + s).slice(-width);
      }
      

      【讨论】:

      • 第一个不适用于 4 位及以上的数字。
      • @VisioN:标题说“总是3位数字”
      • ...虽然负索引在 IE8 及更低版本中会失败。
      • @amnotiam 是的,但还有另一个短语可以考虑不同:如果大于 100,则输出它而不格式化。谁知道哪里是对的路,安全点就好。
      • @VisioN:很公平,帖子已更新。
      【解决方案4】:

      你可以这样做...

      ("00" + day).slice(-3)
      

      它会在前面添加零,然后.slice() 将始终为您提供字符串的最后 3 个值。

      【讨论】:

        【解决方案5】:

        我会写以下函数:

        var pad = function(n, length) {
            var str = "" + n;
            if(str.length < length) str = new Array(length - str.length).join("0") + str;
            return str;
        };
        

        【讨论】:

        • 我想你的意思是.join("0"),我想你的意思是把它放在之前 str
        【解决方案6】:

        我在 his blog 上找到了 Samuel Mullen 的优雅解决方案。我只是优化了zeroes 创建。

        function lpad(value, padding) {
            var zeroes = new Array(padding+1).join("0");
            return (zeroes + value).slice(-padding);
        }
        

        用法:lpad(12, 3) 导致 "012"

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-09-02
          • 1970-01-01
          • 1970-01-01
          • 2019-02-27
          • 2021-07-09
          相关资源
          最近更新 更多