HTML5 नंबर इनपुट - हमेशा 2 दशमलव स्थानों को दिखाएं


103

क्या स्वरूपित करने का कोई तरीका है input[type='number'] हमेशा 2 दशमलव स्थानों को दिखाने के लिए मान ?

उदाहरण: मैं 0.00इसके बजाय देखना चाहता हूं 0

जवाबों:


62

पूर्णांक पर प्रारूप को लागू करने के लिए सुझावों का पालन करना और jQuery का एक टुकड़ा जोड़ना:

parseFloat($(this).val()).toFixed(2)

step = 66 0.01 ’क्रोम 66.0 parseFloat पर एक आकर्षण की तरह मेरे लिए काम नहीं करता है। robot_speed = parseFloat(robot_speed).toFixed(2)
05032 मेंडिसेंट बायस

महान! changeहर बार फ़ील्ड में परिवर्तन करने के लिए आप इस कोड को इसे ट्रिगर करने की विधि में जोड़ सकते हैं : stackoverflow.com/a/58502237/2056125
mhellmeier

60

आप वास्तव में नहीं हो सकते, लेकिन आप एक आधा कदम हो सकते हैं:

<input type='number' step='0.01' value='0.00' placeholder='0.00' />


16
यह Chrome 55.0.2883.75 में काम नहीं करता है। यदि मैं एक फार्म एलीमेंट बनाता हूं, तो मार्कअप को ऊपर रखें, '1200' को इनपुट में टाइप करें और एलीमेंट से दूर टैब पर क्लिक करें, प्रदर्शित टेक्स्ट अभी भी '1200' है और '1200.00' नहीं है।
रिक ग्लोस

8
यह सब करने के लिए लगता है कि नियंत्रण क्या कदम तीर है। 1/3 का मान सेट करने से परिणाम 2 डेसीमल तक सीमित नहीं होगा
Sonic Soul

यह क्रोम संस्करण 78.0.3904.108 (आधिकारिक बिल्ड) (64-बिट) के लिए काम नहीं करता है
Fasco

13

stepविशेषता का उपयोग करके इसे सक्षम करेगा । यह न केवल यह निर्धारित करता है कि इसे कितना चक्र करना है, लेकिन स्वीकार्य संख्या, साथ ही साथ। उपयोग step="0.01" करना चाल को करना चाहिए लेकिन यह इस बात पर निर्भर हो सकता है कि ब्राउज़र मानक का पालन कैसे करता है।

<input type='number' step='0.01' value='5.00'>


7
मेरे लिए काम नहीं करता है। अगर मैं ५.०१ तक क्लिक करता हूं और फिर नीचे ५. in में ५ नहीं ५. 72 क्रोम
5.२ में बताता है

यदि आप एक सख्ती से संख्यात्मक व्याख्या की तलाश कर रहे हैं तो यह सही व्यवहार है, "5.00" एक स्ट्रिंग है।
डिसिडेंट रेज

1
अप्रासंगिक। सवाल हमेशा 2 दशमलव स्थानों को दिखाने का है और यह उत्तर ऐसा नहीं करता है।
gman

फिर वे input[type="text"]सभी देशी घंटियों और सीटी के साथ देख रहे हैं जो इसके input[type="number"]लिए पूरी तरह से reimplimented के साथ आते हैं , या तत्व राज्य के आधार पर मूल्य प्रदर्शित करने के लिए इस फ़ील्ड को दूसरे के लिए स्वैप कर रहे हैं।
डिसिडेंट रेज

8

जो समाधान input="number" step="0.01"क्रोम में मेरे लिए बहुत अच्छा काम करते हैं, हालांकि कुछ ब्राउज़रों में काम नहीं करते हैं, विशेष रूप से मेरे मामले में फ्रंटफोमेशन फ़ायरफ़ॉक्स 35 .. जिसका मुझे समर्थन करना चाहिए।

मेरा समाधान इगोर एस्कोबार के jQuery मास्क प्लगइन के साथ jQuery के लिए था, निम्नानुसार है:

<script src="/your/path/to/jquery-mask.js"></script>
<script>
    $(document).ready(function () {
        $('.usd_input').mask('00000.00', { reverse: true });
    });
</script>

<input type="text" autocomplete="off" class="usd_input" name="dollar_amt">

यह अच्छी तरह से काम करता है, निश्चित रूप से किसी को जमा किए गए मूल्य की जांच करनी चाहिए :) नोट, अगर मुझे ब्राउज़र संगतता के लिए ऐसा करने की आवश्यकता नहीं थी, तो मैं @ उत्तर ब्रैडशॉ द्वारा उपरोक्त उत्तर का उपयोग करूंगा।


2
यकीन नहीं हो रहा था कि यह क्यों घटाया गया .. मेरे आश्चर्य को बहुत कुछ। जैसा कि मैंने अपने जवाब में कहा, यह केवल उन लोगों के लिए एक वैकल्पिक समाधान है जो (मेरे जैसे) ब्राउज़र का समर्थन कर रहे हैं, जिसमें अन्य जवाब काम नहीं करता है। और मुझे पता है कि यह काम करता है क्योंकि यह वर्तमान में उत्पादन और काम कर रहा है!
Little_birdie

इस मामले में जावास्क्रिप्ट एक दोषपूर्ण होना चाहिए, न कि डिफ़ॉल्ट व्यवहार। यदि कार्यक्षमता मौजूद नहीं है, तो जावास्क्रिप्ट को हुक करना उचित है। यदि इनपुट की typeविशेषता है numberया , तो आप परीक्षण करके यह देख सकते हैं text। यदि यह textHTML के लिखे जाने के numberबाद भी वापस आता है , तो ब्राउज़र उस प्रकार का समर्थन नहीं करता है, और इस व्यवहार को उसके लिए हुक करना एक उचित कार्रवाई है।
डिसिडेंट रेज

यदि आपने संकेत दिया है कि एक टिप्पणी में मैंने उस कार्यक्षमता को शामिल करने के लिए अपने उत्तर में संशोधन किया होगा। इन दिनों ज्यादातर एप्लिकेशन या तो बिना js के काम नहीं करते हैं .. या मुश्किल से ही काम करते हैं .. इसलिए यह मूट होता जा रहा है। लेकिन मैं मानता हूं कि चेक लगाने से जवाब सुधर जाएगा। मैं अभी यात्रा कर रहा हूं .. जब मैं वापस आऊंगा तो मैं इसमें संशोधन करूंगा।
थोड़ा_बर्डी

5

@Guilherme Ferreira के इस जवाब के आधार पर आप parseFloatहर बार क्षेत्र में बदलाव के लिए विधि को ट्रिगर कर सकते हैं। इसलिए मान हमेशा दो दशमलव स्थानों को दिखाता है, भले ही कोई उपयोगकर्ता किसी संख्या को मैन्युअल रूप से मान बदल देता हो।

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript">
    $(document).ready(function () {
        $(".floatNumberField").change(function() {
            $(this).val(parseFloat($(this).val()).toFixed(2));
        });
    });
</script>

<input type="number" class="floatNumberField" value="0.00" placeholder="0.00" step="0.01" />


यह केवल तब काम करता है जब तत्व फोकस खो देता है। यदि उपयोगकर्ता इनपुट फ़ील्ड भरने के बाद तुरंत सबमिट बटन पर क्लिक करेगा, तो उसे सही मूल्य नहीं दिखाई देगा जो भ्रामक हो सकता है।
कुल नौसिखिया

मुझे 100% यकीन नहीं है, लेकिन मुझे लगता है change()कि उपयोगकर्ता इनपुट और सबमिट बटन क्लिक के बीच फ़ंक्शन को छोटे समय में चालू किया जाएगा। इसलिए, यह एक समस्या नहीं होनी चाहिए।
mmemeier

हां यह वास्तव में बदल जाता है, लेकिन उपयोगकर्ता को यह पता नहीं चलेगा कि इससे भ्रम पैदा हो सकता है क्योंकि उपयोगकर्ता तुरंत सबमिट किए जाने से पहले सही मूल्य नहीं देखेगा। हालांकि यह सबसे बेकार के लिए एक समस्या नहीं हो सकती है
कुल नौसिखिया

3

यदि उपयोगकर्ता ने टाइपिंग पूरी नहीं की है, तो यह स्वचालित रूप से 2 स्थानों पर गोलाई लिए बिना अधिकतम 2 दशमलव स्थानों को लागू करने का काम करता है।

function naturalRound(e) {

   let dec = e.target.value.indexOf(".")
   let tooLong = e.target.value.length > dec + 3
   let invalidNum = isNaN(parseFloat(e.target.value))

   if ((dec >= 0 && tooLong) || invalidNum) {
     e.target.value = e.target.value.slice(0, -1)
   }
}

3

यदि आप यहाँ आकर सोच रहे हैं कि 2 दशमलव स्थानों तक कैसे सीमित किया जाए तो मेरे पास एक देशी जावास्क्रिप्ट समाधान है:

जावास्क्रिप्ट:

function limitDecimalPlaces(e, count) {
  if (e.target.value.indexOf('.') == -1) { return; }
  if ((e.target.value.length - e.target.value.indexOf('.')) > count) {
    e.target.value = parseFloat(e.target.value).toFixed(count);
  }
}

HTML:

<input type="number" oninput="limitDecimalPlaces(event, 2)" />

ध्यान दें कि यह AFAIK नहीं कर सकता है, संख्या इनपुट के साथ इस क्रोम बग के खिलाफ बचाव करें


1

मुझे पता है कि यह एक पुराना सवाल है, लेकिन मुझे ऐसा लगता है कि इनमें से कोई भी जवाब इस सवाल का जवाब नहीं देता है, इसलिए उम्मीद है कि यह भविष्य में किसी की मदद करेगा।

हाँ, आप हमेशा 2 दशमलव स्थानों को दिखा सकते हैं, लेकिन दुर्भाग्य से यह अकेले तत्व विशेषताओं के साथ नहीं किया जा सकता है, आपको जावास्क्रिप्ट का उपयोग करना होगा।

मुझे यह इंगित करना चाहिए कि यह बड़ी संख्या के लिए आदर्श नहीं है क्योंकि यह हमेशा पीछे चलने वाले शून्य को मजबूर करेगा, इसलिए उपयोगकर्ता को 9.99 से अधिक मूल्य निर्धारित करने के लिए पात्रों को हटाने के बजाय कर्सर को वापस ले जाना होगा।

//Use keyup to capture user input & mouse up to catch when user is changing the value with the arrows
    $('.trailing-decimal-input').on('keyup mouseup', function (e) {

        // on keyup check for backspace & delete, to allow user to clear the input as required
        var key = e.keyCode || e.charCode;
        if (key == 8 || key == 46) {
            return false;
        };

        // get the current input value
        let correctValue = $(this).val().toString();

         //if there is no decimal places add trailing zeros
        if (correctValue.indexOf('.') === -1) {
            correctValue += '.00';
        }

        else {

            //if there is only one number after the decimal add a trailing zero
            if (correctValue.toString().split(".")[1].length === 1) {
                correctValue += '0'
            }

            //if there is more than 2 decimal places round backdown to 2
            if (correctValue.toString().split(".")[1].length > 2) {
                correctValue = parseFloat($(this).val()).toFixed(2).toString();
            }
        }

        //update the value of the input with our conditions
        $(this).val(correctValue);
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="my-number-input" class="form-control trailing-decimal-input" type="number" min="0.01" step="0.01" value="0.00" />


1

यह .toFixed(2)दो दशमलव स्थानों के लिए फ़ंक्शन का उपयोग करके JQuery में एक त्वरित फ़ॉर्मेटर है ।

<input class="my_class_selector" type='number' value='33'/>


// if this first call is in $(document).ready() it will run
// after the page is loaded and format any of these inputs

$(".my_class_selector").each(format_2_dec);
function format_2_dec() {
    var curr_val = parseFloat($(this).val());
    $(this).val(curr_val.toFixed(2));
}

विपक्ष: आपको हर बार यह कॉल करना होगा कि इनपुट नंबर को इसे सुधारने के लिए बदल दिया गया है।

// listener for input being changed
$(".my_class_selector").change(function() {
    // potential code wanted after a change

    // now reformat it to two decimal places
    $(".my_class_selector").each(format_2_dec);
});

नोट: किसी कारण से भले ही इनपुट 'नंबर' का हो, jQuery val()एक स्ट्रिंग देता है। इसलिए द parseFloat()


0

मेरा पसंदीदा दृष्टिकोण, जो dataसंख्या की स्थिति को पकड़ने के लिए विशेषताओं का उपयोग करता है :

<input type='number' step='0.01'/>

// react to stepping in UI
el.addEventListener('onchange', ev => ev.target.dataset.val = ev.target.value * 100)

// react to keys
el.addEventListener('onkeyup', ev => {

    // user cleared field
    if (!ev.target.value) ev.target.dataset.val = ''

    // non num input
    if (isNaN(ev.key)) {

        // deleting
        if (ev.keyCode == 8)

            ev.target.dataset.val = ev.target.dataset.val.slice(0, -1)

    // num input
    } else ev.target.dataset.val += ev.key

    ev.target.value = parseFloat(ev.target.dataset.val) / 100

})

0

शीर्ष उत्तर ने मुझे समाधान दिया लेकिन मुझे यह पसंद नहीं आया कि उपयोगकर्ता इनपुट को तुरंत बदल दिया गया था इसलिए मैंने देरी को जोड़ा जो मेरी राय में बेहतर अनुभव के लिए योगदान देता है

var delayTimer;
function input(ele) {
    clearTimeout(delayTimer);
    delayTimer = setTimeout(function() {
       ele.value = parseFloat(ele.value).toFixed(2).toString();
    }, 800); 
}
<input type='number' oninput='input(this)'>

https://jsfiddle.net/908rLhek/1/


-1
import { Component, Pipe, PipeTransform } from '@angular/core';

@Pipe({
    name: 'replace'
})

export class ReplacePipe implements PipeTransform {
    transform(value: any): any {
        value = String(value).toString();
        var afterPoint = '';
        var plus = ',00';
        if (value.length >= 4) {
            if (value.indexOf('.') > 0) {
                afterPoint = value.substring(value.indexOf('.'), value.length);
                var te = afterPoint.substring(0, 3);
                if (te.length == 2) {
                    te = te + '0';
                }
            }
            if (value.indexOf('.') > 0) {
                if (value.indexOf('-') == 0) {
                    value = parseInt(value);
                    if (value == 0) {
                        value = '-' + value + te;
                        value = value.toString();
                    }
                    else {
                        value = value + te;
                        value = value.toString();
                    }
                }
                else {
                    value = parseInt(value);
                    value = value + te;
                    value = value.toString();
                }
            }
            else {
                value = value.toString() + plus;
            }
            var lastTwo = value.substring(value.length - 2);
            var otherNumbers = value.substring(0, value.length - 3);
            if (otherNumbers != '')
                lastTwo = ',' + lastTwo;
            let newValue = otherNumbers.replace(/\B(?=(\d{3})+(?!\d))/g, ".") + lastTwo;
            parseFloat(newValue);
            return `${newValue}`;
        }
}
}

आप इस पाइप को आजमा सकते हैं
रामकंठरेड्डी कोवडम्पल्ली

-1

ui-number-maskकोणीय के लिए, https://github.com/assisrafael/angular-input-masks

केवल यह:

<input ui-number-mask ng-model="valores.irrf" />

यदि आप एक-एक करके मूल्य डालते हैं ...।

need: 120,01

अंक प्रति अंक

 = 0,01
 = 0,12
 = 1,20
 = 12,00
 = 120,01 final number.

कोणीय के बारे में सवाल में कुछ भी नहीं।
डेल के।

-3

इस पर एक नज़र डालें :

 <input type="number" step="0.01" />

5
यह कदम बढ़ाने के लिए ठीक है, लेकिन प्रारूपण के लिए नहीं। यदि आप 2 दशमलव स्थान चाहते हैं और कोई व्यक्ति "0.1" में प्रवेश करता है (या स्पिन करता है), तो यह सभी ब्राउज़रों में "0.1" (वांछित "0.01" के बजाय) रहेगा। प्लेसहोल्डर केवल खाली स्थिति के लिए काम करता है (यह एक प्रारूप नहीं है, या तो)
MC9000

-3

यह सही जवाब है:

<input type="number" step="0.01" min="-9999999999.99" max="9999999999.99"/>


4
यह एक बेहतर और आधुनिक दृष्टिकोण है जो कि कई अन्य जवाबों के बाद भी दर्ज नहीं किया जाता है, लेकिन जो कुछ दर्ज किया गया है उस पर शून्य नहीं डालता है
13
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.