Voglio formattare un numero per avere due cifre. Il problema si verifica quando 0
- 9
viene passato, quindi ho bisogno che sia formattato su 00
- 09
.
Esiste un formattatore di numeri in JavaScript?
Voglio formattare un numero per avere due cifre. Il problema si verifica quando 0
- 9
viene passato, quindi ho bisogno che sia formattato su 00
- 09
.
Esiste un formattatore di numeri in JavaScript?
Risposte:
Il metodo migliore che ho trovato è simile al seguente:
(Nota che questa versione semplice funziona solo con numeri interi positivi)
var myNumber = 7;
var formattedNumber = ("0" + myNumber).slice(-2);
console.log(formattedNumber);
Per i decimali, potresti usare questo codice (è un po 'sciatto).
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);
Infine, se hai a che fare con la possibilità di numeri negativi, è meglio memorizzare il segno, applicare la formattazione al valore assoluto del numero e riapplicare il segno dopo il fatto. Si noti che questo metodo non limita il numero a 2 cifre totali. Invece limita solo il numero a sinistra del decimale (la parte intera). (La riga che determina il segno è stata trovata qui ).
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);
Utilizzare il metodo toLocaleString () in qualsiasi numero. Quindi per il numero 6, come mostrato di seguito, puoi ottenere i risultati desiderati.
(6).toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false})
Genera la stringa '06'.
(6).toLocaleString(undefined, {minimumIntegerDigits: 2})
Ecco una semplice funzione di imbottitura numerica che utilizzo di solito. Permette qualsiasi quantità di imbottitura.
function leftPad(number, targetLength) {
var output = number + '';
while (output.length < targetLength) {
output = '0' + output;
}
return output;
}
Esempi:
leftPad(1, 2) // 01
leftPad(10, 2) // 10
leftPad(100, 2) // 100
leftPad(1, 3) // 001
leftPad(1, 8) // 00000001
In tutti i browser moderni è possibile utilizzare
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);
}
);
("0" + (date.getMonth() + 1)).slice(-2);
("0" + (date.getDay())).slice(-2);
("0" + (date.getDate())).slice(-2);
Tu puoi fare:
function pad2(number) {
return (number < 10 ? '0' : '') + number
}
Esempio:
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 />');
Risultato:
00
01
02
10
15
Sembra che potresti avere una stringa, anziché un numero. Usa questo:
var num = document.getElementById('input').value,
replacement = num.replace(/^(\d)$/, '0$1');
document.getElementById('input').value = replacement;
Ecco un esempio: http://jsfiddle.net/xtgFp/
Una fodera veloce e sporca ....
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(); };
Questo è semplice e funziona abbastanza bene:
function twoDigit(number) {
var twodigit = number >= 10 ? number : "0"+number.toString();
return twodigit;
}
Ecco una soluzione molto semplice che ha funzionato bene per me.
Dichiara innanzitutto una variabile per contenere il tuo numero.
var number;
Ora converti il numero in una stringa e mantienilo in un'altra variabile;
var numberStr = number.toString();
Ora puoi testare la lunghezza di questa stringa, se è meno del desiderato puoi aggiungere uno 'zero' all'inizio.
if(numberStr.length < 2){
number = '0' + number;
}
Ora usa il numero come desiderato
console.log(number);
Versione migliorata della risposta precedente
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));
So che questo è un post antico, ma volevo fornire un'opzione di soluzione OO più flessibile.
Ho estrapolato un po 'la risposta accettata e ho esteso l' Number
oggetto javascript per consentire il riempimento zero regolabile:
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"
Modifica: aggiungi il codice per evitare di tagliare numeri più lunghi delle cifre richieste.
NOTA: questo è obsoleto in tutti tranne IE. Usa padStart()
invece.
Non esiste un formattatore di numeri integrato per JavaScript, ma ci sono alcune librerie che lo realizzano:
<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>
Ecco una semplice soluzione ricorsiva che funziona per qualsiasi numero di cifre.
function numToNDigitStr(num, n)
{
if(num >= Math.pow(10, n - 1)) { return num; }
return "0" + numToNDigitStr(num, n-1);
}
Se non hai lodash nel tuo progetto, sarà eccessivo aggiungere l'intera libreria solo per usare una funzione. Questa è la soluzione più sofisticata del tuo problema che abbia mai visto.
_.padStart(num, 2, '0')
Ecco la mia versione. Può essere facilmente adattato ad altri scenari.
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();
}
function colorOf(r,g,b){
var f = function (x) {
return (x<16 ? '0' : '') + x.toString(16)
};
return "#" + f(r) + f(g) + f(b);
}
con questa funzione è possibile stampare con qualsiasi n cifra desiderata
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;
};
il mio esempio sarebbe :
<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)
`${number}`.replace(/^(\d)$/, '0$1');
Regex è il migliore.
Il tipo di dati AS in Javascript è determinato in modo dinamico e considera 04 come 4 Utilizzare l'istruzione condizionale se il valore è inferiore a 10, quindi aggiungere 0 prima di esso rendendolo stringa E.g,
var x=4;
x = x<10?"0"+x:x
console.log(x); // 04
Ho creato una funzione di formattazione piuttosto semplice che chiamo ogni volta che ho bisogno di una semplice data formattata. Si occupa della formattazione di singole cifre per raddoppiare le cifre quando sono inferiori a 10. Elimina una data formattata comeSat Sep 29 2018 - 00:05:44
Questa funzione viene utilizzata come parte di una variabile utils, quindi viene chiamata come:
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;
}
}
Aggiornato per le funzioni freccia ES6 (supportato in quasi tutti i browser moderni, vedi CanIUse )
const formatNumber = n => ("0" + n).slice(-2);