0 से एकल-अंकीय संख्याओं को प्रस्तुत करके संख्याओं को कैसे प्रारूपित करें?


296

मैं दो अंकों के लिए एक संख्या को प्रारूपित करना चाहता हूं। समस्या तब होती है जब 0- 9पारित किया जाता है, इसलिए मुझे इसकी आवश्यकता है कि इसे प्रारूपित किया जाए 00- 09

क्या जावास्क्रिप्ट में नंबर फॉर्मेटर है?


जवाबों:


593

सबसे अच्छी विधि जो मैंने पाया है वह कुछ इस प्रकार है:

(ध्यान दें कि यह सरल संस्करण केवल सकारात्मक पूर्णांक के लिए काम करता है)

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);


4
@KeithPower उस डेमो का चित्रण नहीं करता है
जोसेफ मारिकेल

1
@KeithPower यहाँ एक डेमो है जो उपरोक्त विधि दिखाता है: jsfiddle.net/bkTX3 । बॉक्स पर क्लिक करें, मान बदलें, और इसे कार्रवाई में देखने के लिए बॉक्स पर क्लिक करें।
जोसेफ मैरीकल ने

1
@ जोसेफ .75 75 में रूपांतरित है।
गैलड

@ आमतौर पर कहा जाता है कि मेरे अनुभव में इस फॉर्मेटिंग के साथ इस तरह की जरूरत नहीं है, लेकिन मैंने एक साथ एक संपादन किया है जो उस परिदृश्य को कवर करेगा।
जोसेफ मारिकेल

इसके अलावा .toPrecision()विधि w3schools.com/jsref/jsref_topreults.asp
ओलेग

133

यदि संख्या 9 से अधिक है, तो संख्या को एक स्ट्रिंग (संगतता) में परिवर्तित करें। अन्यथा, एक शून्य जोड़ें।

function n(n){
    return n > 9 ? "" + n: "0" + n;
}

n( 9); //Returns "09"
n(10); //Returns "10"
n(999);//Returns "999"

4
हालांकि नकारात्मक समय के बारे में क्या। 0-1: 20: 00
mjwrazor

131

किसी भी संख्या में toLocaleString () विधि का उपयोग करें। तो नंबर 6 के लिए, जैसा कि नीचे देखा गया है, आप वांछित परिणाम प्राप्त कर सकते हैं।

(6).toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false})

स्ट्रिंग '06' उत्पन्न करेगा।


17
यह निश्चित रूप से हाथ से तार काटने से बेहतर है। अधिक स्पष्ट रूप से, और यदि आपके पृष्ठ का उपयोग अमेरिका से बाहर किया जा सकता है, तो आप इसे ट्वीक करना चाहते हैं:(6).toLocaleString(undefined, {minimumIntegerDigits: 2})
मार्क स्लेटर

2
IE 9 के साथ इसका उपयोग 06 के बजाय 6.00 बनाता है।
ड्रू

1
काम करता है, लेकिन आपको IE> = 11.
Saftpresse99

या intl.js पॉलीफ़िल के साथ
मैक्सिसम

2
मैं IE को अनदेखा करने के लिए पूरी तरह तैयार हूं, लेकिन मोबाइल ब्राउज़रों में इसका अच्छा समर्थन नहीं है। src: developer.mozilla.org/en/docs/Web/JavaScript/Reference/…
chetan92

50

यहाँ एक साधारण संख्या का पेडिंग फंक्शन है जिसका उपयोग मैं आमतौर पर करता हूँ। यह किसी भी प्रकार की पैडिंग के लिए अनुमति देता है।

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

नकारात्मक समय के साथ भी मुद्दे हैं। क्या इसे ठीक करने का कोई तरीका है?
mjwrazor

39

सभी आधुनिक ब्राउज़रों में आप उपयोग कर सकते हैं

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);
  }
);


1
ज्ञात हो कि यह IE में सभी डेवलपर.
टिम

इसके अलावा यह नोड के कुछ पुराने संस्करणों में काम नहीं करता है (संभवतः नोड 8 से पुराने कुछ भी)
JSilv

20

@ लाइफहाक का जवाब मेरे लिए बहुत उपयोगी था; जहां मुझे लगता है कि हम इसे सकारात्मक संख्याओं के लिए एक पंक्ति में कर सकते हैं

 String(input).padStart(2, '0');

12
("0" + (date.getMonth() + 1)).slice(-2);
("0" + (date.getDay())).slice(-2);

1
मुझे लगता है कि आप महीने के दिन प्राप्त करने के लिए निम्नलिखित का मतलब है:("0" + (date.getDate())).slice(-2);
जेफ Moeller

11

तुम कर सकते हो:

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

8

ऐसा लगता है कि आपके पास संख्या के बजाय एक स्ट्रिंग हो सकती है। इसे इस्तेमाल करो:

var num = document.getElementById('input').value,
    replacement = num.replace(/^(\d)$/, '0$1');
document.getElementById('input').value = replacement;

यहाँ एक उदाहरण है: http://jsfiddle.net/xtgFp/


7

जल्दी और गंदा एक लाइनर ...।

function zpad(n, len) {
  return 0..toFixed(len).slice(2,-n.toString().length)+n.toString();
}

1
बहुत ही उत्तम कार्य। यह इस तरह से विस्तार विधि के रूप में उपयोग करने के लिए बेहतर है:Number.prototype.leftPad = String.prototype.leftPad = function (pad) { return 0..toFixed(pad).slice(2, -this.toString().length) + this.toString(); };
ConductedClever

6

यह सरल है और बहुत अच्छी तरह से काम करता है:

function twoDigit(number) {
  var twodigit = number >= 10 ? number : "0"+number.toString();
  return twodigit;
}

1
के रूप में लिखा जा सकता है: वापसी संख्या> = 10? संख्या: "0" + number.toString ();
apfz

6

यहाँ एक बहुत ही सरल उपाय है जो मेरे लिए अच्छा काम करता है।

पहले अपना नंबर धारण करने के लिए एक चर घोषित करें।

var number;

अब संख्या को एक स्ट्रिंग में परिवर्तित करें और इसे दूसरे चर में पकड़ें;

var numberStr = number.toString();

अब आप इस स्ट्रिंग की लंबाई का परीक्षण कर सकते हैं, यदि यह वांछित से कम है तो आप शुरुआत में 'शून्य' जोड़ सकते हैं।

if(numberStr.length < 2){
      number = '0' + number;
}

अब वांछित संख्या का उपयोग करें

console.log(number);

6

यहां मैंने पाया सबसे आसान उपाय: -

let num = 9; // any number between 0 & 99
let result = ( '0' + num ).substr( -2 );


5

मुझे पता है कि यह एक प्राचीन पोस्ट है, लेकिन मैं एक अधिक लचीला और OO समाधान विकल्प प्रदान करना चाहता था।

मैंने स्वीकार्य उत्तर को थोड़ा सा बढ़ा दिया है और 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()इसके बजाय उपयोग करें ।


4

जावास्क्रिप्ट के लिए कोई अंतर्निहित संख्या सूत्रकार नहीं है, लेकिन कुछ पुस्तकालय हैं जो इसे पूरा करते हैं:

  1. underscore.string एक स्प्रिंटफ फ़ंक्शन (कई अन्य उपयोगी फ़ॉर्मेटर्स के साथ) प्रदान करता है
  2. जावास्क्रिप्ट-स्प्रिंटफ , जो उधार से अंडरस्कोर करता है।

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);
}

3

यदि आप एक ही समय में अपने अंकों को सीमित करना चाहते हैं:

function pad2(number) {
  number = (number < 10 ? '0' : '') + number;
  number = number.substring(0,2);
  return number;
}

यह किसी भी मूल्य का काट देगा जो दो अंकों से अधिक है। मैं इसे फैनौर के समाधान पर बढ़ा रहा हूं।


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>

2

यहां एक सरल पुनरावर्ती समाधान है जो अंकों की किसी भी संख्या के लिए काम करता है।

function numToNDigitStr(num, n)
{
    if(num >=  Math.pow(10, n - 1)) { return num; }
    return "0" + numToNDigitStr(num, n-1);
}

2

यदि आपके पास अपनी परियोजना में दर्ज नहीं है, तो यह केवल एक फ़ंक्शन का उपयोग करने के लिए पूरे पुस्तकालय को जोड़ने के लिए एक ओवरकिल होगा। यह आपकी समस्या का सबसे परिष्कृत समाधान है जिसे मैंने कभी देखा है।

_.padStart(num, 2, '0')

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();
}

1
    function colorOf(r,g,b){
  var f = function (x) {
    return (x<16 ? '0' : '') + x.toString(16) 
  };

  return "#" +  f(r) + f(g) + f(b);
}

आपको कुछ संदर्भों को जोड़ने पर विचार करना चाहिए, न कि अपने उत्तरों के लिए कोड।
माइक

1

किसी के लिए जो समय के अंतर और परिणाम चाहते हैं जो नकारात्मक संख्या ले सकते हैं यहां एक अच्छा है। पैड (3) = "03", पैड (-2) = "-02", पैड (-234) = "-234"

pad = function(n){
  if(n >= 0){
    return n > 9 ? "" + n : "0" + n;
  }else{
    return n < -9 ? "" + n : "-0" + Math.abs(n);
  }
}

1

इस फ़ंक्शन के साथ आप अपने इच्छित किसी भी एन अंकों के साथ प्रिंट कर सकते हैं

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;
};

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)

1

`${number}`.replace(/^(\d)$/, '0$1');

रेगेक्स सबसे अच्छा है।


यह जो के उत्तर के ऊपर लगभग वैसा ही प्रतीत होता है । कृपया अपने उत्तर को बेहतर बनाने के लिए अतिरिक्त जानकारी जोड़ने पर विचार करें, या इसे पूरी तरह से हटा दें।
एथन

1

जावास्क्रिप्ट में एएस डायटाइप को गतिशील रूप से निर्धारित किया जाता है यह 04 के रूप में व्यवहार करता है 4 का उपयोग करें सशर्त विवरण यदि मान कम है तो 10 और फिर इसे स्ट्रिंग ईग बनाकर इससे पहले 0 जोड़ें

var x=4;
  x = x<10?"0"+x:x
 console.log(x); // 04

1

मैंने एक बहुत ही सरल प्रारूप फ़ंक्शन का निर्माण किया, जिसे मैं जब भी कहता हूं, मुझे एक साधारण तिथि की आवश्यकता होती है। जब वे 10. अंक से कम होते हैं, तो एकल अंकों को दोहरे अंकों में प्रारूपित करने का काम करता हैSat Sep 29 2018 - 00:05:44

इस फ़ंक्शन का उपयोग एक बर्तन चर के हिस्से के रूप में किया जाता है, इसलिए इसे इस प्रकार कहा जाता है:

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;
  }
}

1

ES6 एरो फ़ंक्शंस के लिए अपडेट किया गया (लगभग सभी आधुनिक ब्राउज़रों में समर्थित, CanIUse देखें )

const formatNumber = n => ("0" + n).slice(-2);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.