2013-04-22 8 views
7

मैं इस साधारण समारोह है:toLocaleString() सभी ब्राउज़रों में समर्थित नहीं है?

क्रोम, Firefox, IE:

Number(1000000).toLocaleString() 
"1 000 000" // in french system, the space is the separator instead of the comma 

ओपेरा, मैक्सथन:

Number(1000000).toLocaleString() 
"1000000" 

क्यों ओपेरा और मैक्सथन नहीं कर सकते प्रारूप यह? वे इस विधि का समर्थन करते हैं लेकिन इसे सही तरीके से निष्पादित नहीं करते हैं?

कोई toLocaleString() प्रतिस्थापन है?

+1

बस उनका कहना है कि आप भी अपने उपयोगकर्ताओं को 'नंबर (1000000) भर में एक समान उत्पादन उम्मीद नहीं करनी चाहिए .toLocaleString();' मुझे देता है '" 1000000 "' (Google क्रोम, एन-जीबी)। [** एमडीएन पृष्ठ **] देखें (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/toLocaleString) इसके लिए कौन से पैरामीटर लेना चाहिए और किस ब्राउज़र में यह समर्थित है । –

+0

@PaulS। क्षमा करें, यह सटीक भूल गया कि मैं फ्रेंच ओएस का उपयोग करता हूं, और फ्रेंच सिस्टम में, अल्पविराम –

+0

के बजाय एक स्थान का उपयोग करके पृथक्करण किया जाता है ऐसा लगता है कि यह क्रोम में भी अनुपस्थित था! खेद है क्योंकि मैंने सोचा था कि अगर कोई विधि हो तो एक विधि हमेशा एक परिणाम लौटाना चाहिए! –

उत्तर

3

language spec परिभाषा छोड़ देता है बहुत ओपन एंडेड:

15.7.4.3 Number.prototype.toLocaleString()

एक स्ट्रिंग मान है कि इस संख्या मेजबान पर्यावरण के वर्तमान स्थान की परंपराओं के अनुसार प्रारूपित मूल्य का प्रतिनिधित्व करता उत्पन्न करता है। यह फ़ंक्शन कार्यान्वयन-निर्भर है, और इसे अनुमत है, लेकिन प्रोत्साहित नहीं किया जाता है, क्योंकि इसे उसी स्ट्रिंग के रूप में वापस करने के लिए प्रोत्साहित किया जाता है।

विभिन्न ब्राउज़रों को इसे अलग-अलग कार्यान्वित करने की अनुमति है, और उपयोगकर्ता द्वारा चुने गए लोकेल के आधार पर इसे अलग-अलग कार्यान्वित कर सकते हैं।

+0

तो मुझे कोई प्रत्यक्ष प्रतिस्थापन नहीं है? मुझे स्वरूपण प्रोग्राम करना होगा या बाहरी पुस्तकालय का उपयोग करना होगा? –

+1

@AbdelouahabPp, यदि आपको सभी ब्राउज़रों पर समान संख्या स्वरूपण की आवश्यकता है, तो हाँ, आपको कार्यान्वयन-निर्भर कार्यों से बचने की आवश्यकता है। –

+0

आह धन्यवाद, उम्मीद है कि वे इसे उस सूची से हटाए जाने के रूप में लागू करेंगे;) –

9

आउटपुट उपयोगकर्ता की लोकेल सेटिंग्स के आधार पर भी अलग होगा, भले ही Number.prototype.toLocaleString उनके ब्राउज़र द्वारा समर्थित है, उदा। मेरे लिए एन-जीबी, Number(1000000).toLocaleString(); मुझे "1,000,000" देता है।

क्या कोई toLocaleString() प्रतिस्थापन है?

एक ऐसा क्यों नहीं लिखना चाहिए जो आप चाहते हैं? उदाहरण के लिए,

function localeString(x, sep, grp) { 
    var sx = (''+x).split('.'), s = '', i, j; 
    sep || (sep = ' '); // default seperator 
    grp || grp === 0 || (grp = 3); // default grouping 
    i = sx[0].length; 
    while (i > grp) { 
     j = i - grp; 
     s = sep + sx[0].slice(j, i) + s; 
     i = j; 
    } 
    s = sx[0].slice(0, i) + s; 
    sx[0] = s; 
    return sx.join('.'); 
} 

अब

localeString(1000000.00001); 
// "1 000 000.00001" 
+0

आह! वह काम करेगा! धन्यवाद –

+0

क्योंकि पाइथन से आ रहा हूं, मैंने सोचा कि यह आसान था, मेथो स्ट्रिंगम को उलटा करने के लिए उलटा था, फिर इसे फिर से घुमाएं .... लेकिन यह बहुत सारी लाइनें बनायेगा!यदि आप एक स्ट्रिंग को उलटा करना चाहते हैं तो पाइथन में, आप केवल एक नकारात्मक कदम बनाते हैं, "हैलो" [:: - 1] 'और नवीनतम तत्व ऋणात्मक है, उदाहरण के लिए' ओ '' हैलो 'होगा [ -1] 'वास्तव में दुनिया अजगर से आने वाले किसी से कठिन है;) आप फिर से –

+2

'abc'.split (' ')। रिवर्स()। शामिल हों (' ')'' cba'' है, लेकिन आप अभी भी इस तरह से ऊपर लूप करने की आवश्यकता होगी। बस इसके बजाय लूप नीचे। इसके अलावा, 'abc'.slice (-1) ''' c'' है। –

संबंधित मुद्दे