Bir sayıyı iki basamaklı olacak şekilde biçimlendirmek istiyorum. Sorun 0
- 9
geçtiğinde neden olur , bu yüzden 00
- biçimlendirilmesi gerekiyor 09
.
JavaScript'te bir sayı biçimlendirici var mı?
Bir sayıyı iki basamaklı olacak şekilde biçimlendirmek istiyorum. Sorun 0
- 9
geçtiğinde neden olur , bu yüzden 00
- biçimlendirilmesi gerekiyor 09
.
JavaScript'te bir sayı biçimlendirici var mı?
Yanıtlar:
Bulduğum en iyi yöntem aşağıdaki gibi bir şey:
(Bu basit sürümün yalnızca pozitif tamsayılar için çalıştığını unutmayın)
var myNumber = 7;
var formattedNumber = ("0" + myNumber).slice(-2);
console.log(formattedNumber);
Ondalık sayılar için bu kodu kullanabilirsiniz (yine de biraz özensizdir).
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);
Son olarak, negatif sayılar olasılığı ile uğraşmak zorundaysanız, işareti saklamak, biçimlendirmeyi sayının mutlak değerine uygulamak ve işareti gerçeğin ardından tekrar uygulamak en iyisidir. Bu yöntemin sayıyı toplam 2 basamakla sınırlamadığını unutmayın. Bunun yerine, yalnızca ondalık sayının solundaki sayıyı kısıtlar (tam sayı kısmı). (İşareti belirleyen satır burada bulundu ).
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);
Herhangi bir sayıda toLocaleString () yöntemini kullanın. Böylece, aşağıda görüldüğü gibi 6 sayısı için istenen sonuçları alabilirsiniz.
(6).toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false})
'06' dizesini oluşturur.
(6).toLocaleString(undefined, {minimumIntegerDigits: 2})
İşte genellikle kullandığım basit bir sayı doldurma işlevi. Herhangi bir miktarda dolguya izin verir.
function leftPad(number, targetLength) {
var output = number + '';
while (output.length < targetLength) {
output = '0' + output;
}
return output;
}
Örnekler:
leftPad(1, 2) // 01
leftPad(10, 2) // 10
leftPad(100, 2) // 100
leftPad(1, 3) // 001
leftPad(1, 8) // 00000001
Tüm modern tarayıcılarda kullanabilirsiniz
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);
Yapabilirsin:
function pad2(number) {
return (number < 10 ? '0' : '') + number
}
Misal:
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 />');
Sonuç:
00
01
02
10
15
Görünüşe göre bir sayı yerine bir dizeniz olabilir. bunu kullan:
var num = document.getElementById('input').value,
replacement = num.replace(/^(\d)$/, '0$1');
document.getElementById('input').value = replacement;
İşte bir örnek: http://jsfiddle.net/xtgFp/
Hızlı ve kirli bir astar ....
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(); };
Bu basit ve oldukça iyi çalışıyor:
function twoDigit(number) {
var twodigit = number >= 10 ? number : "0"+number.toString();
return twodigit;
}
İşte benim için iyi çalışan çok basit bir çözüm.
Önce numaranızı tutacak bir değişken bildirin.
var number;
Şimdi sayıyı bir dizeye dönüştürün ve başka bir değişkende tutun;
var numberStr = number.toString();
Şimdi bu dizenin uzunluğunu test edebilirsiniz, eğer istenenden azsa başlangıçta 'sıfır' ekleyebilirsiniz.
if(numberStr.length < 2){
number = '0' + number;
}
Şimdi numarayı istediğiniz gibi kullanın
console.log(number);
Önceki yanıtın geliştirilmiş sürümü
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));
Bunun eski bir yazı olduğunu biliyorum, ama daha esnek ve OO çözüm seçeneği sunmak istedim.
Kabul edilen cevabı biraz tahmin ettik ve Number
ayarlanabilir sıfır doldurmaya izin vermek için javascript nesnesini uzattım:
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"
Düzenle: İstediğiniz rakamlardan daha uzun sayıların kesilmesini önlemek için kod ekleyin.
NOT: Bu, IE dışında tümüyle geçersizdir. padStart()
Bunun yerine kullanın .
JavaScript için yerleşik bir sayı biçimlendirici yoktur, ancak bunu yapan bazı kütüphaneler vardır:
<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>
İşte herhangi bir sayıda basamak için çalışan basit bir özyinelemeli çözüm.
function numToNDigitStr(num, n)
{
if(num >= Math.pow(10, n - 1)) { return num; }
return "0" + numToNDigitStr(num, n-1);
}
Projenizde lodash yoksa, sadece bir işlevi kullanmak için tüm kütüphaneyi eklemek aşırı derecede olacaktır. Bu, şimdiye kadar gördüğüm probleminizin en sofistike çözümü.
_.padStart(num, 2, '0')
Biçimlendirilmiş basit bir tarihe ihtiyaç duyduğumda çağırdığım oldukça basit bir biçim işlevi oluşturdum. Tek basamakları 10'dan küçük olduklarında çift basamaklara biçimlendirmekle ilgilenir.Sat Sep 29 2018 - 00:05:44
Bu işlev, utils değişkeninin bir parçası olarak kullanılır;
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;
}
}
İşte benim versiyonum. Diğer senaryolara kolayca uyarlanabilir.
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);
}
Zaman farkına sahip olmak ve negatif sayılar alabilecek sonuçlara sahip olmak isteyen herkes için iyi bir şeydir. yastık (3) = "03", yastık (-2) = "-02", yastık (-234) = "-234"
pad = function(n){
if(n >= 0){
return n > 9 ? "" + n : "0" + n;
}else{
return n < -9 ? "" + n : "-0" + Math.abs(n);
}
}
bu işlevle istediğiniz herhangi bir n basamağı ile yazdırabilirsiniz
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;
};
benim örneğim :
<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)
JavaScript AS veri türü değeri sonra 10 o zaman dize marka tarafından kendisine önce 0 eklemek az ise o 04 4 olarak kullanın koşullu ifadesi davranır dinamik belirlenir , Örn
var x=4;
x = x<10?"0"+x:x
console.log(x); // 04
ES6 Ok İşlevleri için güncellendi (Hemen hemen tüm modern tarayıcılarda desteklenir, bkz. CanIUse )
const formatNumber = n => ("0" + n).slice(-2);