我想将数字格式化为两位数。传递0
- 9
时会导致此问题,因此我需要将其格式化为00
- 09
。
JavaScript中是否有数字格式化程序?
答案 0 :(得分:485)
我发现的最佳方法如下:
(注意,这个简单版本仅适用于正整数)
var myNumber = 7;
var formattedNumber = ("0" + myNumber).slice(-2);
console.log(formattedNumber);

对于小数,您可以使用此代码(虽然它有点草率)。
var myNumber = 7.5;
var dec = myNumber - Math.floor(myNumber);
myNumber = myNumber - dec;
var formattedNumber = ("0" + myNumber).slice(-2) + dec.toString().substr(1);
console.log(formattedNumber);

最后,如果您必须处理负数的可能性,最好存储该符号,将格式应用于该数字的绝对值,并在事后重新应用该符号。请注意,此方法不会将数字限制为2位总数。相反,它只限制小数左边的数字(整数部分)。 (确定符号的行here)。
var myNumber = -7.2345;
var sign = myNumber?myNumber<0?-1:1:0;
myNumber = myNumber * sign + ''; // poor man's absolute value
var dec = myNumber.match(/\.\d+$/);
var int = myNumber.match(/^[^\.]+/);
var formattedNumber = (sign < 0 ? '-' : '') + ("0" + int).slice(-2) + (dec !== null ? dec : '');
console.log(formattedNumber);
&#13;
答案 1 :(得分:113)
如果数字高于9,请将数字转换为字符串(一致性)。否则,添加零。
function n(n){
return n > 9 ? "" + n: "0" + n;
}
n( 9); //Returns "09"
n(10); //Returns "10"
n(999);//Returns "999"
答案 2 :(得分:95)
使用任意数字的toLocaleString()方法。因此对于数字6,如下所示,您可以获得所需的结果。
(6).toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false})
将生成字符串'06'。
答案 3 :(得分:46)
这是我经常使用的简单数字填充函数。它允许任何数量的填充。
function leftPad(number, targetLength) {
var output = number + '';
while (output.length < targetLength) {
output = '0' + output;
}
return output;
}
示例:
leftPad(1, 2) // 01
leftPad(10, 2) // 10
leftPad(100, 2) // 100
leftPad(1, 3) // 001
leftPad(1, 8) // 00000001
答案 4 :(得分:23)
在所有现代浏览器中,您都可以使用
numberStr.padStart(2, "0");
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart
function zeroPad(numberStr) {
return numberStr.padStart(2, "0");
}
var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
numbers.forEach(
function(num) {
var numString = num.toString();
var paddedNum = zeroPad(numString);
console.log(paddedNum);
}
);
&#13;
答案 5 :(得分:11)
("0" + (date.getMonth() + 1)).slice(-2);
("0" + (date.getDay())).slice(-2);
答案 6 :(得分:9)
你可以这样做:
function pad2(number) {
return (number < 10 ? '0' : '') + number
}
示例:
document.write(pad2(0) + '<br />');
document.write(pad2(1) + '<br />');
document.write(pad2(2) + '<br />');
document.write(pad2(10) + '<br />');
document.write(pad2(15) + '<br />');
结果:
00
01
02
10
15
答案 7 :(得分:9)
@Lifehack的回答对我非常有用;我认为我们可以在一行中为正数做到这一点
String(input).padStart(2, '0');
答案 8 :(得分:7)
看起来你可能有一个字符串,而不是一个数字。用这个:
var num = document.getElementById('input').value,
replacement = num.replace(/^(\d)$/, '0$1');
document.getElementById('input').value = replacement;
以下是一个示例:http://jsfiddle.net/xtgFp/
答案 9 :(得分:6)
这很简单,效果很好:
function twoDigit(number) {
var twodigit = number >= 10 ? number : "0"+number.toString();
return twodigit;
}
答案 10 :(得分:6)
快速而脏的一个班轮......
function zpad(n, len) {
return 0..toFixed(len).slice(2,-n.toString().length)+n.toString();
}
答案 11 :(得分:5)
我知道这是一篇古老的帖子,但我想提供更灵活的OO解决方案选项。
我已经推断了接受的答案并扩展了javascript的Number
对象以允许可调整的零填充:
Number.prototype.zeroPad = function(digits) {
var loop = digits;
var zeros = "";
while (loop) {
zeros += "0";
loop--;
}
return (this.toString().length > digits) ?
this.toString() : (zeros + this).slice(-digits);
}
var v = 5;
console.log(v.zeroPad(2)); // returns "05"
console.log(v.zeroPad(4)); // returns "0005"
修改:添加代码以防止截断的数字超过您请求的数字。
注意:除了IE之外,这已经过时了。请改用padStart()
。
答案 12 :(得分:5)
这是我找到的最简单的解决方案:-
let num = 9; // any number between 0 & 99
let result = ( '0' + num ).substr( -2 );
答案 13 :(得分:5)
这是一个非常简单的解决方案,对我来说很有效。
首先声明一个变量来保存您的电话号码。
var number;
现在将数字转换为字符串,并将其保存在另一个变量中;
var numberStr = number.toString();
现在,您可以测试此字符串的长度,如果该字符串小于期望的长度,则可以在开头添加一个“零”。
if(numberStr.length < 2){
number = '0' + number;
}
现在根据需要使用数字
console.log(number);
答案 14 :(得分:5)
以前回答的改进版本
function atLeast2Digit(n){
n = parseInt(n); //ex. if already passed '05' it will be converted to number 5
var ret = n > 9 ? "" + n: "0" + n;
return ret;
}
alert(atLeast2Digit(5));
&#13;
答案 15 :(得分:4)
没有用于JavaScript的内置数字格式化程序,但有一些库可以实现此目的:
答案 16 :(得分:3)
或
function zpad(n,l){
return rep(l-n.toString().length, '0') + n.toString();
}
与
function rep(len, chr) {
return new Array(len+1).join(chr);
}
答案 17 :(得分:3)
我的版本:
`${Math.trunc(num / 10)}${Math.trunc(num % 10)}`;
const func = (num) => `${Math.trunc(num / 10)}${Math.trunc(num % 10)}`;
const nums = [1, 3, 5, 6, 8, 9, 10, 20, 56, 80];
nums.forEach(num => console.log(func(num)));
答案 18 :(得分:3)
如果您想同时限制数字:
function pad2(number) {
number = (number < 10 ? '0' : '') + number;
number = number.substring(0,2);
return number;
}
这也会削减超过两位数的任何值。 我一直在根据fanaur的解决方案进行扩展。
答案 19 :(得分:2)
您可以使用 padStart
方法:
更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart
检查这个例子:function n(num, len = 2) {
return `${num}`.padStart(len, '0');
}
console.log(n( 9)); //print "09"
console.log(n(10)); //print "10"
console.log(n(999)); //print "999"
console.log(n(999,6));//print "000999"
答案 20 :(得分:2)
如果您没有在项目中使用lodash,那么添加整个库只是为了使用一个功能将是一种过度的做法。这是我见过的最复杂的问题解决方案。
_.padStart(num, 2, '0')
答案 21 :(得分:2)
这是一个简单的递归解决方案,适用于任意数量的数字。
function numToNDigitStr(num, n)
{
if(num >= Math.pow(10, n - 1)) { return num; }
return "0" + numToNDigitStr(num, n-1);
}
答案 22 :(得分:2)
<html>
<head>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#test').keypress(allowOnlyTwoPositiveDigts);
});
function allowOnlyTwoPositiveDigts(e){
var test = /^[\-]?[0-9]{1,2}?$/
return test.test(this.value+String.fromCharCode(e.which))
}
</script>
</head>
<body>
<input id="test" type="text" />
</body>
</html>
答案 23 :(得分:1)
我的例子是:
<div id="showTime"></div>
function x() {
var showTime = document.getElementById("showTime");
var myTime = new Date();
var hour = myTime.getHours();
var minu = myTime.getMinutes();
var secs = myTime.getSeconds();
if (hour < 10) {
hour = "0" + hour
};
if (minu < 10) {
minu = "0" + minu
};
if (secs < 10) {
secs = "0" + secs
};
showTime.innerHTML = hour + ":" + minu + ":" + secs;
}
setInterval("x()", 1000)
答案 24 :(得分:1)
使用此功能,您可以使用任何您想要的n位数打印
function frmtDigit(num, n) {
isMinus = num < 0;
if (isMinus)
num *= -1;
digit = '';
if (typeof n == 'undefined')
n = 2;//two digits
for (i = 1; i < n; i++) {
if (num < (1 + Array(i + 1).join("0")))
digit += '0';
}
digit = (isMinus ? '-' : '') + digit + num;
return digit;
};
答案 25 :(得分:1)
对于任何想要有时间差异并且结果可以取负数的人来说,这是一个很好的结果。 pad(3)=&#34; 03&#34 ;, pad(-2)=&#34; -02&#34 ;, pad(-234)=&#34; -234&#34;
@echo off
FOR /D %%G in ("*") DO (
PUSHD "%%G"
FOR /F "delims=" %%H in ('dir /a-d /b * ^|find /C /V ""') DO echo %%G %%H>>"..\count.txt"
POPD
)
答案 26 :(得分:1)
`${number}`.replace(/^(\d)$/, '0$1');
正则表达是最好的。
答案 27 :(得分:1)
Javascript中的AS数据类型是动态确定的,它将04视为4 如果value小于10,则使用条件语句,然后通过make it string 在它之前添加0 的 E.g,强>
var x=4;
x = x<10?"0"+x:x
console.log(x); // 04
答案 28 :(得分:1)
function colorOf(r,g,b){
var f = function (x) {
return (x<16 ? '0' : '') + x.toString(16)
};
return "#" + f(r) + f(g) + f(b);
}
答案 29 :(得分:1)
我构建了一个非常简单的格式函数,当我需要格式化一个简单的日期时会调用它。它处理的是将小于10的一位数字格式化为两位数字。它淘汰了一个格式为Sat Sep 29 2018 - 00:05:44
此函数用作utils变量的一部分,因此称为:
let timestamp = utils._dateFormatter('your date string');
var utils = {
_dateFormatter: function(dateString) {
let d = new Date(dateString);
let hours = d.getHours();
let minutes = d.getMinutes();
let seconds = d.getSeconds();
d = d.toDateString();
if (hours < 10) {
hours = '0' + hours;
}
if (minutes < 10) {
minutes = '0' + minutes;
}
if (seconds < 10) {
seconds = '0' + seconds;
}
let formattedDate = d + ' - ' + hours + ':' + minutes + ':' + seconds;
return formattedDate;
}
}
答案 30 :(得分:1)
我的示例如下
var n =9;
var checkval=('00'+n).slice(-2);
console.log(checkval)
,输出为09
答案 31 :(得分:1)
这是一个古老的问题,但想补充一下。在现代浏览器中,您可以使用setup.cfg
来简化正数的格式:
importScripts("precache-manifest.7b51ac9589a6dc8041a85d8f1792defa.js", "https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js");
如果要支持IE并知道最大位数(例如10位):
repeat
对于负整数:
('0'.repeat(digits - 1) + num).substr(-digits)
对于正数使用显式('000000000' + num).substr(-digits)
:
(num < 0 ? '-' : '') + ('000000000' + Math.abs(num)).substr(-digits)
答案 32 :(得分:1)
这是我的版本。可以很容易地适应其他场景。
function setNumericFormat(value) {
var length = value.toString().length;
if (length < 4) {
var prefix = "";
for (var i = 1; i <= 4 - length; i++) {
prefix += "0";
}
return prefix + value.toString();
}
return value.toString();
}
答案 33 :(得分:0)
已更新为ES6箭头功能(几乎所有现代浏览器都支持,请参见CanIUse)
const formatNumber = n => ("0" + n).slice(-2);
答案 34 :(得分:0)
这是一个非常好的简短解决方案:
solve(puzzleString) {
var board = this.boardParser(puzzleString)
var emptySpot = this.getDot(board);
var row = emptySpot[0];
var column = emptySpot[1];
// full board condition
if (this.solved(board)) {
return puzzleString;
}
for (var i = 1; i <= 9; i++) {
if (this.checkvalue(board, row, column, i)) {
board[row][column] = i;
var boardString = this.stringifyBoard(board);
var result = this.solve(boardString);
if(result !== false){
return result;
}
}
}
// if board is unsolvable return false
return false;
}