如何在 javascript 中将整数格式化为特定长度?

新手上路,请多包涵

我在 Javascript 中有一个数字,我知道它小于 10000 并且也是非负数。我想将它显示为四位数字,前导零。还有比下面更优雅的吗?

 if(num<10) num="000"+num;
else if(num<100) num="00"+num;
else if(num<1000) num="0"+num;

我想要 Javascript 内置的东西,但我似乎找不到任何东西。

原文由 Kip 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 863
2 个回答

由于 ES2017 填充到最小长度可以简单地使用 String.prototype.padStartString.prototype.padEnd 完成:

 let number = 3
let string = number.toString().padStart(3, '0')
console.log(string) // "003"

或者如果只有 float 的整个部分应该是固定长度:

 let number = 3.141
let array = number.toString().split('.')
array[0] = array[0].padStart(3, '0')
let string = array.join('.')
console.log(string) // "003.141"

这些简单的操作都没有使用句柄符号,仅在数字不是整数时显示小数部分,或其他情况 - 所以这是一个没有选项的简单示例格式化函数:

 function format (number) {
    let [ integer, fraction = '' ] = number.toString().split('.')
    let sign = ''
    if (integer.startsWith('-')) {
        integer = integer.slice(1)
        sign = '-'
    }
    integer = integer.padStart(3, '0')
    if (fraction) {
        fraction = '.' + fraction.padEnd(6, '0')
    }
    let string = sign + integer + fraction
    return string
}

console.log(format(3)) // "003"
console.log(format(-3)) // "-003"
console.log(format(4096)) // "4096"
console.log(format(-3.141)) // "-003.141000"

尽管值得注意的是,这不会处理不是数字的东西,也不会处理将 toString 转化为科学记数法的数字。

原文由 spkrtn 发布,翻译遵循 CC BY-SA 4.0 许可协议

我能想到的最简单的方法是:

 ("000" + num).slice(-4)

填充数字是一个字符串。

当您将数字添加到字符串时,它会转换为字符串。

字符串有 slice 方法,它返回固定长度的字符串片段。

如果长度为负,则返回的字符串从字符串的末尾开始切片。

去测试:

 var num=12;
console.log(("000" + num).slice(-4)); // Will show "0012"

这当然只适用于最多 4 位的正整数。一个稍微复杂的解决方案,将处理正整数:

 '0'.repeat( Math.max(4 - num.toString().length, 0)) + num

通过重复添加零来创建一个字符串,只要位数(字符串长度)小于 4 添加数字,然后也将转换为字符串。

编辑: 从现在开始你应该使用这个函数:

 String(num).padStart(4,'0')

它仍然不处理负数……

原文由 Simon Rigét 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题