जावास्क्रिप्ट में स्ट्रिंग को फ्लोट में कैसे बदलें?


255

मैं डेटाग्रिड से दो मानों को पार्स करने की कोशिश कर रहा हूं। फ़ील्ड संख्यात्मक होते हैं, और जब उनके पास अल्पविराम (उदा। 554,20) होता है, तो मुझे अल्पविराम के बाद नंबर नहीं मिल सकते हैं। मैं कोशिश की है parseIntऔर parseFloat। मैं यह कैसे कर सकता हूँ?


इसे भी देखें: stackoverflow.com/questions/24318654
dreftymac

जवाबों:


371

यदि वे अलग-अलग मूल्य के हैं, तो यह कोशिश करें:

var values = "554,20".split(",")
var v1 = parseFloat(values[0])
var v2 = parseFloat(values[1])

यदि वे एक ही मूल्य (जैसे फ्रेंच में, जहां एक आधा 0,5 लिखा है)

var value = parseFloat("554,20".replace(",", "."));

6
एक हजार सेपरेटर के रूप में आपके पास कॉमा का उपयोग करने के बारे में क्या है? उदा। 1234 को 1,234 के रूप में लिखा गया
क्रिस बी

6
आप सिर्फ अल्पविराम को हटा सकते हैं, फिर इसे पार्स कर सकते हैं। (उदा। इसे "" से प्रतिस्थापित करें)
जेसी रूसक

7
यह बहुत सुरक्षित नहीं है, जैसा कि scanto = parseFloat ("5, 5, .replace (", ",", "")); यह मानने के लिए 5 अग्रणी है कि यह एक वैध संख्या है, लेकिन आप .5 भाग को ढीला कर सकते हैं या आप इस पर विचार कर सकते हैं कि यह वैध संख्या नहीं है
अधिकतम 4

1
@ max4ever आप चुपचाप स्वीकार कर अमान्य नंबर के बारे में चिंतित हैं, तो आप उपयोग कर सकते हैं +(string)के बजाय parseString(string)नीचे के रूप में @Stev ने सुझाव दिया। तो, पहला उदाहरण होगा v1 = +(values[0]); v2 = +(values[1]);
जेसी रसाक

1
अगर मेरा नंबर है, तो क्या होगा 6.000.000। फ़ंक्शन केवल पहले कॉमा विभाजक को प्रतिस्थापित करता है
GusDeCooL

55

क्या आपने कभी ऐसा करने की कोशिश की है? : p

var str = '3.8';ie
alert( +(str) + 0.2 );

+ (स्ट्रिंग) फ्लोट में स्ट्रिंग डालेगा।

हैंडी!

तो अपनी समस्या को हल करने के लिए, आप कुछ इस तरह से कर सकते हैं:

var floatValue = +(str.replace(/,/,'.'));

7
मुझे वास्तव में +(str)समाधान पसंद है - parseFloatसंख्या के बाद अमान्य वर्णों की उपेक्षा, उन मामलों में +(str)रिटर्न NaN, जो वास्तव में मुझे चाहिए।
एलेक्स

34

अल्पविराम को एक बिंदु से बदलें।

यह केवल 554 लौटाएगा:

var value = parseFloat("554,20")

यह 554.20 लौटाएगा:

var value = parseFloat("554.20")

तो अंत में, आप बस उपयोग कर सकते हैं:

var fValue = parseFloat(document.getElementById("textfield").value.replace(",","."))

मत भूलो कि parseInt()केवल पूर्णांक (कोई फ़्लोटिंग पॉइंट) पार्स करने के लिए उपयोग किया जाना चाहिए। आपके मामले में यह केवल 554 वापस आएगा। इसके अतिरिक्त, एक फ्लोट पर parseInt () को कॉल करने से संख्या को गोल नहीं किया जाएगा: यह इसकी मंजिल (निकटतम निचला पूर्णांक) ले जाएगा।


पेड्रो फरेरा के सवालों का जवाब देने के लिए विस्तारित उदाहरण

यदि टेक्स्टफील्ड में हजारों विभाजक बिंदु होते हैं, जैसे कि 1.234.567,99दूसरे के साथ पहले ही समाप्त हो सकते हैं replace:

var fValue = parseFloat(document.getElementById("textfield").value.replace(/\./g,"").replace(",","."))

किस बारे में "।" हजार का विभाजक? 4.554,20 की तरह क्या होगा ...?
पेड्रो फरेरा

16

अगर आप स्ट्रिंग ऑब्जेक्ट को इस तरह बढ़ाते हैं ..

String.prototype.float = function() { 
  return parseFloat(this.replace(',', '.')); 
}

.. आप इसे इस तरह चला सकते हैं

"554,20".float()
> 554.20

डॉट के साथ भी काम करता है

"554.20".float()
> 554.20

typeof "554,20".float()
> "number"

10
यद्यपि आमतौर पर इसे आधार वस्तु प्रोटोटाइप को संशोधित करने के लिए बुरा रूप माना जाता है। क्या होगा अगर एक और फ्रेमवर्क ने भी ऐसा करने की कोशिश की लेकिन कार्यक्षमता अलग हो गई?
फ़्रेकेहेड

3

@GusDeCool या कोई भी एक हजार से अधिक विभाजकों को बदलने की कोशिश कर रहा है, ऐसा करने का एक तरीका एक रेगीक्स ट्रेवल है /foo/g:। बस याद रखें कि .एक मेटाचैक्टर है, इसलिए आपको इसे बचाना होगा या इसे ब्रैकेट ( \.या [.]) में रखना होगा । यहाँ एक विकल्प है:

var str = '6.000.000';
str.replace(/[.]/g,",");

1
हाँ, एक रेगेक्स के बिना प्रतिस्थापित केवल चरित्र की एक घटना को प्रतिस्थापित करता है।
औखन

2

आप इस फ़ंक्शन का उपयोग कर सकते हैं। यह अल्पविराम को '' के साथ बदल देगा और फिर यह मान को पार्स करेगा और इसके बाद यह फिर से मान में अल्पविराम को समायोजित करेगा।

function convertToFloat(val) {
        if (val != '') {
            if (val.indexOf(',') !== -1)
                val.replace(',', '');
            val = parseFloat(val);
            while (/(\d+)(\d{3})/.test(val.toString())) {
                val = val.toString().replace(/(\d+)(\d{3})/, '$1' + ',' + '$2');
            }
        }
        return val;
    }

0

मुझे एक ही समस्या थी सिवाय इसके कि मुझे पहले से पता नहीं था कि हजारों विभाजक और दशमलव विभाजक क्या थे। मैंने ऐसा करने के लिए एक पुस्तकालय लिखना समाप्त कर दिया। यदि आप इसे यहाँ रुचि रखते हैं तो यह है: https://github.com/GuillaumeLeclerc/number-parsing


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.