मेरे पास एक इनपुट फ़ील्ड है जिसे .toLocaleString() का उपयोग करके स्वरूपित किया गया है।

फिर मुझे उस मान पर parseFloat() का उपयोग करने की आवश्यकता है ताकि इसे किसी संख्या में परिवर्तित किया जा सके।

यूएस लोकेल के साथ ऐसा करने के लिए, मैं parseFloat() निष्पादित करने से पहले दशमलव को अलग करने के लिए बस value.replace(',','') का उपयोग करता हूं।

हालाँकि यह यूरोपीय स्थानों में काम नहीं करता है जिसमें हज़ार विभाजक और दशमलव बिंदु उलटे होते हैं।

क्या यह निर्धारित करने का कोई तरीका है कि आपका उपयोगकर्ता किस लोकेल में है और फिर पहले अल्पविराम और दशमलव को उल्टा करना है या नहीं?

0
willsmanley 10 जिंदा 2020, 12:33

1 उत्तर

सबसे बढ़िया उत्तर

आप पहले यह देखने के लिए toLocaleString का उपयोग कर सकते हैं कि एक उदाहरण संख्या को स्ट्रिंग में कैसे परिवर्तित किया जाता है, फिर उस आउटपुट से सीखें कि लोकेल के विभाजक क्या हैं, और उस जानकारी का उपयोग स्ट्रिंग को पार्स करने के लिए करें:

function localeParseFloat(s, locale) {
    // Get the thousands and decimal separator characters used in the locale.
    let [,thousandsSeparator,,,,decimalSeparator] = 1111.1.toLocaleString(locale);
    // Remove thousand separators, and put a point where the decimal separator occurs
    s = Array.from(s, c => c === thousandsSeparator ? "" 
                         : c === decimalSeparator   ? "." : c).join("");
    // Now it can be parsed
    return parseFloat(s);
}

console.log(parseFloat(localeParseFloat("1.100,9"))); // user's locale
console.log(parseFloat(localeParseFloat("1.100,9", "us"))); // US locale
console.log(parseFloat(localeParseFloat("1.100,9", "nl"))); // Dutch locale: reversed meaning of separators
// And the same but with separators switched:
console.log(parseFloat(localeParseFloat("1,100.9"))); // user's locale
console.log(parseFloat(localeParseFloat("1,100.9", "us"))); // US locale
console.log(parseFloat(localeParseFloat("1,100.9", "nl"))); // Dutch locale: reversed meaning of separators
2
trincot 10 जिंदा 2020, 10:24