我想将数字格式化为两位数。该问题是在0
– 9
通过时引起的,因此我需要将其格式化为00
– 09
。
JavaScript中有数字格式化程序吗?
我想将数字格式化为两位数。该问题是在0
– 9
通过时引起的,因此我需要将其格式化为00
– 09
。
JavaScript中有数字格式化程序吗?
Answers:
我发现最好的方法是如下所示:
(请注意,此简单版本仅适用于正整数)
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位数字。而是仅将数字限制在小数点(整数部分)的左侧。(在此处找到确定标志的行)。
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);
.toPrecision()
方法w3schools.com/jsref/jsref_toprecision.asp
如果数字大于9,则将数字转换为字符串(一致性)。否则,添加零。
function n(n){
return n > 9 ? "" + n: "0" + n;
}
n( 9); //Returns "09"
n(10); //Returns "10"
n(999);//Returns "999"
可以使用任意数量的toLocaleString()方法。因此,对于数字6,如下所示,您可以获得预期的结果。
(6).toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false})
将生成字符串“ 06”。
(6).toLocaleString(undefined, {minimumIntegerDigits: 2})
这是我通常使用的简单数字填充功能。它允许任何数量的填充。
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
在所有现代浏览器中,您都可以使用
numberStr.padStart(2, "0");
https://developer.mozilla.org/zh-CN/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);
}
);
("0" + (date.getMonth() + 1)).slice(-2);
("0" + (date.getDay())).slice(-2);
("0" + (date.getDate())).slice(-2);
看来您可能有一个字符串,而不是数字。用这个:
var num = document.getElementById('input').value,
replacement = num.replace(/^(\d)$/, '0$1');
document.getElementById('input').value = replacement;
这是一个示例:http : //jsfiddle.net/xtgFp/
快速而肮脏的一根内衬。
function zpad(n, len) {
return 0..toFixed(len).slice(2,-n.toString().length)+n.toString();
}
Number.prototype.leftPad = String.prototype.leftPad = function (pad) { return 0..toFixed(pad).slice(2, -this.toString().length) + this.toString(); };
我知道这是一篇很古老的文章,但是我想提供一个更灵活和面向对象的解决方案。
我已经推断出可接受的答案,并扩展了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()
代替。
没有用于JavaScript的内置数字格式器,但是有一些库可以完成此操作:
<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>
使用此功能,您可以使用任意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;
};
我的例子是:
<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)
我构建了一个非常简单的格式函数,当我需要格式化一个简单的日期时会调用它。它处理的是将小于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;
}
}