जावास्क्रिप्ट में दो दशमलव स्थानों के साथ फ्लोट कैसे करें?


410

मेरे पास निम्न कोड है। मैं यह चाहूंगा कि अगर price_result एक पूर्णांक के बराबर हो, मान लें कि 10, तो मैं दो दशमलव स्थानों को जोड़ना चाहूंगा। तो 10 होगा 10.00। या अगर यह 10.6 के बराबर होता है तो 10.60 होगा। यकीन नहीं है कि यह कैसे करना है।

price_result = parseFloat(test_var.split('$')[1].slice(0,-1));

जवाबों:


914

आप ऐसा करने के लिए फ़िक्स्ड () का उपयोग कर सकते हैं

var twoPlacedFloat = parseFloat(yourString).toFixed(2)

1
मदद करने और अच्छे काम को जारी रखने में खुशी - "हर दिन एक नई चीज सीखना"
महेश वेलगा

3
हालांकि बहुत छोटी गाड़ी है। इसके अलावा, यहां w3schools developer.mozilla.org/en-US/docs/JavaScript/Reference/…
19:12

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

19
var twoPlacedFloat = + parseFloat(yourString).toFixed(2)फ्लोट में बदलने के लिए उपयोग करें
जोस रुई सैंटोस

13
स्ट्रिंग के बजाय एक संख्या प्राप्त करने के लिए parens जोड़ें: parseFloat ((yourString) .toFixed (2));
22

50

जब आप उपयोग करते हैं toFixed, तो यह हमेशा एक स्ट्रिंग के रूप में मान लौटाता है। यह कभी-कभी कोड को जटिल करता है। उससे बचने के लिए, आप नंबर के लिए एक वैकल्पिक तरीका बना सकते हैं।

Number.prototype.round = function(p) {
  p = p || 10;
  return parseFloat( this.toFixed(p) );
};

और उपयोग करें:

var n = 22 / 7; // 3.142857142857143
n.round(3); // 3.143

या केवल:

(22/7).round(3); // 3.143

मैंने एक शॉपिंग कार्ट प्रोग्राम लिखा और पार्सफ्लोअट () पद्धति से जंजीर () और गोल () तरीकों का उपयोग करने की कोशिश की। इन तरीकों में से किसी ने भी पार्सफ्लोअट () के साथ काम नहीं किया।
12:22 पर क्रिस 22

इसने मुझे कुछ सिरदर्द होने से बचाया। इसके लिए सिर्फ +1। मुझे नहीं पता था कि यह संख्याओं को बदल देगा।
लुकास

ParseFloat करते हैं @Lukas, नहीं है
व्लाडा

यदि मैं '2.00' नंबर पर आवेदन करता हूं तो यह 2 रिटर्न देता है
सौरिन दसहादिया

यह विधि सुधारों के लिए है, स्वरूपण के लिए नहीं। उदाहरण के लिए: 0.1 + 0.2 // 0.30000000000000004इसलिए मुझे इसके लिए सुधार की आवश्यकता है(0.1+0.2).round() // 0.3
Vlada

47

यदि आपको प्रदर्शन की आवश्यकता है (जैसे खेलों में):

Math.round(number * 100) / 100

यह पारसेफ्लोट के रूप में उपवास के बारे में 100 गुना है।

http://jsperf.com/parsefloat-tofixed-vs-math-round


5
उपरोक्त सूत्र '2.00' रिटर्न के साथ 2. लेकिन मैं चाहता हूं कि यह 2.00 हो।
सौरिन दषाडिया

5
आपके पास इसके दोनों तरीके नहीं हो सकते। यदि आप चाहते हैं कि आउटपुट एक स्ट्रिंग के बजाय एक संख्या हो, तो आपको अनुगामी शून्य नहीं मिलेगा। तो आप एक स्ट्रिंग में परिवर्तित उपरोक्त का उपयोग कर सकते हैं: var TwoPlacedFloat = (Math.round (2.002745 * 100) / 100) .toFixed (2);
pvanallen

3
अगर मैं 100 की 200 को बदलूं तो गति में वृद्धि होगी?
alashow

यदि फ्लोटिंग पॉइंट ऑपरेशंस की संख्या समान रहती है तो गति समान होगी, इसलिए नहीं
Rob Boerman

कोई सरल क्यों नहीं number * 1मैं शायद कुछ याद कर रहा हूँ missing?
ncubica

11

संख्या वापस करने के लिए, कोष्ठकों की एक और परत जोड़ें। इसे साफ रखता है।

var twoPlacedFloat = parseFloat((10.02745).toFixed(2));

2
क्या आप अपने सूत्र में कुछ याद कर रहे हैं? var twoPlacedFloat = parseFloat(('2.00').toFixed(2))त्रुटि उत्पन्न करता है।
सौरिन दषाडिया

क्षमा करें, एक संख्या के बजाय एक स्ट्रिंग चर था, जिसे अभी निर्धारित किया गया था () की जरूरत है -। लेकिन Math.round का उपयोग करते हुए रोब का जवाब प्रदर्शन के मामले में विचार करने के लिए कुछ है।
pvanallen

यह व्लादा के जवाब के लिए एक टिप्पणी होनी चाहिए।
रोड्रिकर

5

यदि आपका उद्देश्य पार्स करना है, और आपका इनपुट शाब्दिक हो सकता है, तो आप एक उम्मीद करेंगे floatऔर toFixedयह प्रदान नहीं करेंगे, इसलिए यहां यह प्रदान करने के लिए दो सरल कार्य हैं:

function parseFloat2Decimals(value) {
    return parseFloat(parseFloat(value).toFixed(2));
}

function parseFloat2Decimals(value,decimalPlaces) {
    return parseFloat(parseFloat(value).toFixed(decimalPlaces));
}

2
वह जासूसी का काम नहीं करता। parseFloat(parseFloat('10.5').toFixed(2))लौट 10.5आया 10.50। साथ ही parseFloat(parseFloat('10.50').toFixed(2))वापसी10.5
MTK

हालांकि यह एक फ्लोट है, इसलिए 10.5 10.50 के बराबर है
सैवेज

मुझे पता है कि १०.५ == १०.५० लेकिन मुझे १०.५० नहीं १०.५० पर ग्राहक को प्रिंट करने की आवश्यकता है
एमटीके

2

लॉश से छत शायद सबसे अच्छा है

_.ceil("315.9250488",2) 
_.ceil(315.9250488,2) 
_.ceil(undefined,2)
_.ceil(null,2)
_.ceil("",2)

एक नंबर के साथ भी काम करेगा और यह सुरक्षित है


1
व्यवहार्य उत्तर यदि लॉश का उपयोग कर रहा हूं, मैं वर्तमान में अंडरस्कोर का उपयोग कर रहा हूं। जेएस और वर्तमान में 1.9.1 पर समान फ़ंक्शन नहीं है।
रोड्रिकर

1

@sd लघु उत्तर: जेएस में कोई तरीका नहीं है कि दशमलव के बाद शून्य अनुपात के साथ संख्या डेटाटाइप मान हो।

दीर्घ उत्तर: स्ट्रिंग को वापस करने के लिए जावास्क्रिप्ट की toFixedया toPrecisionफ़ंक्शन की संपत्ति । इसका कारण यह है कि संख्या डेटाटाइप का मान = 2.00 नहीं हो सकता है, यह हमेशा दशमलव के बाद ट्रेलिंग शून्य को हटा देगा, यह नंबर डेटाटाइप की इनबिल्ट संपत्ति है। तो जेएस में उपरोक्त प्राप्त करने के लिए हमारे पास 2 विकल्प हैं

  1. या तो स्ट्रिंग के रूप में डेटा का उपयोग करें या
  2. 2.50 -> 2.5 के अंत में केस '0' के साथ मूल्य को काट दिया गया है। संख्या में दशमलव के बाद शून्य नहीं हो सकता है

0

यदि आप राउंड ऑफ नहीं करना चाहते हैं तो कृपया नीचे दिए गए फ़ंक्शन का उपयोग करें।

function ConvertToDecimal(num) {
    num = num.toString(); //If it's not already a String
    num = num.slice(0, (num.indexOf(".")) + 3); //With 3 exposing the hundredths place
   alert('M : ' +  Number(num)); //If you need it back as a Number    
}

0

इसके लायक के लिए: एक दशमलव संख्या, एक दशमलव संख्या है, आप या तो इसे किसी अन्य मूल्य के लिए गोल करते हैं या नहीं। आंतरिक रूप से, यह फ्लोटिंग पॉइंट ऑर्थेटिक और हैंडलिंग के नियम के अनुसार एक दशमलव अंश को अनुमानित करेगा। यह एक दशमलव संख्या (अस्थायी बिंदु, जेएस में एक डबल) आंतरिक रूप से रहता है, इससे कोई फर्क नहीं पड़ता कि आप कितने अंकों के साथ इसे प्रदर्शित करना चाहते हैं।

इसे प्रदर्शन के लिए प्रस्तुत करने के लिए, आप स्ट्रिंग रूपांतरण के द्वारा प्रदर्शन की शुद्धता को चुन सकते हैं। प्रस्तुति एक प्रदर्शन मुद्दा है, न कि भंडारण की चीज।


0

आप फ्लोट वैल्यू 2 अंकों के लिए .toFixed () का उपयोग कर सकते हैं

Exampale

let newValue = parseFloat(9.990000).toFixed(2)

//output
9.99

-1

इसे आज़माएं (कोड में टिप्पणियां देखें):

function fixInteger(el) {
    // this is element's value selector, you should use your own
    value = $(el).val();
    if (value == '') {
        value = 0;
    }
    newValue = parseInt(value);
    // if new value is Nan (when input is a string with no integers in it)
    if (isNaN(newValue)) {
        value = 0;
        newValue = parseInt(value);
    }
    // apply new value to element
    $(el).val(newValue);
}

function fixPrice(el) {
    // this is element's value selector, you should use your own
    value = $(el).val();
    if (value == '') {
        value = 0;
    }
    newValue = parseFloat(value.replace(',', '.')).toFixed(2);
    // if new value is Nan (when input is a string with no integers in it)
    if (isNaN(newValue)) {
        value = 0;
        newValue = parseFloat(value).toFixed(2);
    }
    // apply new value to element
    $(el).val(newValue);
}

-1

सरल जावास्क्रिप्ट, तैरने के लिए स्ट्रिंग:

var it_price = chief_double($("#ContentPlaceHolder1_txt_it_price").val());

function chief_double(num){
    var n = parseFloat(num);
    if (isNaN(n)) {
        return "0";
    }
    else {
        return parseFloat(num);
    }
}


-2
Solution for FormArray controllers 

फॉर्मएयर को प्रारंभिक बनाएँ बिल्डर

  formInitilize() {
    this.Form = this._formBuilder.group({
      formArray: this._formBuilder.array([this.createForm()])
    });
  }

फॉर्म बनाएँ

  createForm() {
    return (this.Form = this._formBuilder.group({
      convertodecimal: ['']
    }));
  }

प्रपत्र नियंत्रक में प्रपत्र मान सेट करें

  setFormvalues() {
    this.Form.setControl('formArray', this._formBuilder.array([]));
    const control = <FormArray>this.resourceBalanceForm.controls['formArray'];
    this.ListArrayValues.forEach((x) => {
      control.push(this.buildForm(x));
    });
  }

  private buildForm(x): FormGroup {
    const bindvalues= this._formBuilder.group({
      convertodecimal: x.ArrayCollection1? parseFloat(x.ArrayCollection1[0].name).toFixed(2) : '' // Option for array collection
// convertodecimal: x.number.toFixed(2)    --- option for two decimal value 
    });

    return bindvalues;
  }

-3

मुझे दूसरा उपाय मिल गया है।

आप round()इसके बजाय ऐसा करने के लिए उपयोग कर सकते हैंtoFixed()

var twoPlacedFloat = parseFloat(yourString).round(2)

7
@AustinHenley मैंने राउंड () का उपयोग करने की कोशिश की और यह काम नहीं किया। शायद इसीलिए लोग वोटिंग से कम हैं। वह मैथ.वार्ड ()
नाथन

@ नथन को इनलाइन का उपयोग करने की आवश्यकता है, parseFloat()जैसा कि मैंने @zsalzbank द्वारा उत्तर को अद्यतन किया है
एलेस्टेयर

3
नहीं, यह काम नहीं करता है। आप Math.round (parseFloat (yourString), 2) आज़मा सकते हैं;
ऑगी गार्डनर

1
क्यों नहीं एक जवाब है जो काम नहीं करेगा downvote? वहाँ बस के रूप round()में js में संख्या पर ऐसी कोई विधि नहीं है । असली सवाल यह है कि इसे किसने उकेरा।
7
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.