संख्या फ़ॉर्मेटर
अल्पविराम, संक्षिप्ताक्षर, मुद्रा प्रतीकों और कस्टम दशमलव के साथ संख्याओं को फ़ॉर्मेट करें।
यह कैसे काम करता है
- अपनी संख्या दर्ज करें: एक संख्यात्मक मान टाइप या पेस्ट करें, पूर्णांक, दशमलव, बड़ी संख्याएँ या वैज्ञानिक नोटेशन।
- प्रारूप विकल्प चुनें: अपनी स्थानीयता (US, EU, आदि), दशमलव की संख्या, समूह विभाजक चुनें।
- फ़ॉर्मेट किया गया परिणाम कॉपी करें: संख्या चुने गए प्रारूप में तुरंत प्रदर्शित होती है।
नंबर फ़ॉर्मेटर क्यों इस्तेमाल करें?
संख्याओं का अर्थ स्थानीयताओं के अनुसार अलग होता है। अमेरिका एक हज़ार को 1,000.00 लिखता है जबकि कई यूरोपीय देश 1.000,00 लिखते हैं।
विशेषताएँ
- स्थान-विशिष्ट फ़ॉर्मेटिंग: दशमलव और समूह विभाजकों के साथ US, EU और अंतर्राष्ट्रीय प्रारूपों का समर्थन।
- दशमलव सटीकता नियंत्रण: सटीक रूप से सेट करें कि कितने दशमलव प्रदर्शित करने हैं।
- हज़ार समूहीकरण: एक क्लिक में हज़ार विभाजक जोड़ें या हटाएँ।
- मुद्रा फ़ॉर्मेटिंग: मुद्रा प्रतीक उपसर्ग करें और मौद्रिक मान के रूप में प्रारूपित करें।
- वैज्ञानिक नोटेशन: बहुत बड़ी या बहुत छोटी संख्याओं के लिए वैज्ञानिक नोटेशन से या तक रूपांतरित करें।
अक्सर पूछे जाने वाले प्रश्न
US और यूरोपीय संख्या प्रारूप में क्या अंतर है?
अमेरिका में, दशमलव विभाजक बिंदु (.) है और हज़ारों विभाजक कॉमा (,), जैसे 1,234.56। अधिकांश यूरोप में इसका उल्टा है।
क्या मैं मुद्राओं के लिए संख्याएँ फ़ॉर्मेट कर सकता हूँ?
हाँ। मुद्रा मोड सक्षम करें और फ़ॉर्मेट की गई संख्या से पहले उपसर्ग करने के लिए एक प्रतीक ($ € £ ¥, आदि) चुनें।
क्या यह बहुत बड़ी या बहुत छोटी संख्याओं को संभालता है?
हाँ। फ़ॉर्मेटर बहु-अंकीय संख्याओं को संभालता है और उन्हें मानक, समूहीकृत या वैज्ञानिक नोटेशन में प्रदर्शित कर सकता है।
नंबर फॉर्मेटिंग मानक कहाँ से आते हैं
आज सॉफ़्टवेयर में जो नंबर फॉर्मेट आप देखते हैं वे मानकों के एक छोटे ढेर से परिभाषित हैं जिसे स्थिर होने में तीस साल लगे। IEEE 754 (1985), 2008 और 2019 में संशोधित, ने बाइनरी फ्लोटिंग-पॉइंट संख्याओं का बिट लेआउट तय किया: 64 बिट 1 चिह्न, 11 घातांक, 52 मांटिसा में विभाजित, जो कि हुड के नीचे हर JavaScript नंबर है। ISO 4217 (1978, वर्तमान संस्करण 2015) ने तीन-अक्षर मुद्रा कोड परिभाषित किए, USD, EUR, JPY, INR, BRL, और प्रत्येक के पास कितनी छोटी इकाइयाँ हैं (USD के लिए 2, JPY के लिए 0, KWD के लिए 3, CLF के लिए 4)। Unicode CLDR (Common Locale Data Repository), पहली बार 2003 में जारी, खुला डेटासेट है जो हर लोकेल के लिए समूह विभाजक, दशमलव विभाजक, मुद्रा प्रतीक और बहुवचन नियम रिकॉर्ड करता है; वर्तमान रिलीज CLDR 46 (अक्टूबर 2024) है। ECMA-402 (2012), ECMAScript अंतर्राष्ट्रीयकरण API, ने JavaScript को उस डेटा से Intl.NumberFormat के माध्यम से एक देशी बंधन दिया, जो V8, JavaScriptCore, और SpiderMonkey में ICU (International Components for Unicode) द्वारा समर्थित है। एक साथ वे चार स्पेक्स वही हैं जो (1234567).toLocaleString('de-DE') को 1,234,567 के बजाय 1.234.567 लौटाने पर मजबूर करते हैं।
छह लोकेल पैटर्न जो आपको मिलेंगे
जंगल में अधिकांश नंबर फॉर्मेट छह पैटर्न में आते हैं। इन छह को याद रखना किसी भी वैश्विक उत्पाद के उपयोगकर्ता आधार का ~95% कवर करता है।
- en-US, en-GB, ja-JP, zh-CN, ko-KR, अल्पविराम समूह, बिंदु दशमलव:
1,234,567.89। - de-DE, es-ES, it-IT, nl-NL, pt-BR, बिंदु समूह, अल्पविराम दशमलव:
1.234.567,89। इसे US स्प्रेडशीट में चिपकाते समय सावधान रहें। - fr-FR, ru-RU, sv-SE, pl-PL, संकीर्ण नो-ब्रेक स्पेस समूह (Unicode U+202F), अल्पविराम दशमलव:
1 234 567,89। विभाजक एक नियमित स्पेस नहीं है; व्हाइटस्पेस को सामान्य करने वाले सिस्टम के माध्यम से कॉपी-पेस्ट करना इसे भ्रष्ट करेगा। - de-CH, दायाँ एकल उद्धरण समूह (U+2019), बिंदु दशमलव:
1’234’567.89। स्विट्जरलैंड यहाँ अद्वितीय है। - en-IN, hi-IN, अल्पविराम समूह, बिंदु दशमलव, लेकिन समूहन 3-3-3 के बजाय 2-2-3 है:
12,34,567.89। यह लाख/करोड़ प्रणाली को दर्शाता है: 1 लाख = 10⁵, 1 करोड़ = 10⁷। - ar-EG, ar-SA, अरबी-भारतीय अंक (٠١٢٣٤٥٦٧٨٩), अरबी दशमलव U+066B, अरबी हजार विभाजक U+066C:
١٬٢٣٤٬٥٦٧٫٨٩। अधिकांश अरबी-भाषी डेवलपर वातावरण आंतरिक रूप से लैटिन अंकों का उपयोग करते हैं और केवल प्रदर्शन के लिए स्विच करते हैं।
राउंडिंग मोड, वे वास्तव में क्या करते हैं
ECMA-402 (2023) ने Intl.NumberFormat में नौ राउंडिंग मोड जोड़े। चुनाव वित्तीय कुल, वैज्ञानिक रिपोर्ट और कर गणना बदलता है। व्यवहार में तीन सबसे अधिक मायने रखते हैं।
halfExpand(डिफ़ॉल्ट)। 2.5 राउंड होकर 3, −2.5 राउंड होकर −3। यह वह राउंडिंग है जो सभी ने स्कूल में सीखी और JavaScript डिफ़ॉल्ट है।halfEven(बैंकर्स राउंडिंग)। 2.5 राउंड होकर 2, 3.5 राउंड होकर 4, टाई हमेशा सम अंक पर जाते हैं। फ्लोटिंग-पॉइंट अंकगणित के लिए IEEE 754 द्वारा आवश्यक। US कर तालिकाओं, वैज्ञानिक कंप्यूटिंग और प्रमुख लेखा सिस्टम में एक छोटे व्यवस्थित बायस को हटाने के लिए उपयोग किया जाता है जोhalfExpandलाखों राउंडिंग पर पेश करता है।trunc। कटऑफ के बाद सब कुछ बिना राउंडिंग के गिरा देता है। 2.9 से 2, −2.9 से −2। तब उपयोग किया जाता है जब आप सचमुच परिशुद्धता को त्यागना चाहते हैं, पैसे के लिए कभी नहीं।- अन्य छह (
ceil,floor,expand,halfCeil,halfFloor,halfTrunc) विशेष मामलों को संभालते हैं जैसे शिपिंग लागत के लिए हमेशा ऊपर राउंडिंग या टैक्स छूट के लिए हमेशा नीचे राउंडिंग। जानबूझकर चुनें, यदि पैसा या अनुपालन शामिल है तो डिफ़ॉल्ट स्वीकार न करें।
जहाँ यह उपकरण अपना मूल्य कमाता है
- वित्तीय रिपोर्ट। स्लाइड डेक के लिए राजस्व, खर्च, अनुपात फॉर्मेट करें। दर्शकों के देश से मेल खाने के लिए US और EU फॉर्मेट के बीच स्विच करें।
- आपके स्टोर की लोकेल जाँच। इच्छित फॉर्मेट में एक कीमत टाइप करें और सत्यापित करें कि यह आपकी ई-कॉमर्स साइट जर्मनी या भारत में ग्राहक के लिए जो रेंडर करती है उससे मेल खाती है।
- CSV तैयारी। जर्मन
1.234,56पंक्तियों को US1234.56में बदलें इससे पहले कि उन्हें एक शीट में आयात किया जाए जो बिंदु-दशमलव की अपेक्षा करती है, या इसके विपरीत। - भारतीय रुपया फॉर्मेटिंग। 12,500,000 को दक्षिण एशियाई दर्शकों के लिए 1,25,00,000 (1.25 करोड़) में बदलें। अधिकांश US-निर्मित उपकरण ऐसा नहीं करते।
- डैशबोर्ड कॉम्पैक्ट डिस्प्ले। उन विजेट के लिए जहाँ क्षैतिज स्थान तंग है, 1,234,567 को
1.23Mमें बदलें। कॉम्पैक्ट नोटेशन भी लोकेल-जागरूक है: जर्मन1,23 Mio.दिखाता है - मुद्रा प्रतीक प्रीपेंडिंग। प्रत्येक लोकेल के लिए सही स्थिति में $, €, £, ¥, ₹ जोड़ें, US डॉलर सामने बैठता है, जर्मन यूरो पीछे बैठता है।
- Excel वैज्ञानिक-नोटेशन एस्केप। Twitter snowflakes जैसे चिपकाए गए बड़े ID
1.23E+18में परिवर्तित हो जाते हैं और परिशुद्धता खो देते हैं। उन्हें चिपकाने से पहले समूहन प्लस अग्रणी एपोस्ट्रोफ के साथ फॉर्मेट करें ताकि Excel उन्हें टेक्स्ट के रूप में मानता है।
गलतियाँ जो अनुभवी डेवलपर्स को भी काटती हैं
- पैसे पर फ्लोटिंग-पॉइंट अंकगणित।
0.1 + 0.2 === 0.30000000000000004हर IEEE 754 भाषा में, न कि सिर्फ JavaScript। मुद्रा को पूर्णांक छोटी इकाइयों (सेंट) के रूप में संग्रहीत करें याdecimal.jsजैसी दशमलव लाइब्रेरी का उपयोग करें। फॉर्मेटिंग त्रुटि छुपाती है, यह इसे ठीक नहीं करती। - लोकेल स्ट्रिंग्स की भोली पार्सिंग।
parseFloat("1,234.56")1234.56नहीं,1लौटाता है।parseFloat("1.234,56")1.234लौटाता है। लोकेल-फॉर्मेटेड नंबर को पार्स करने के लिए, समूह विभाजकों को हटाएं फिर दशमलव चिह्न को बदलें, आदर्श रूप सेIntl.NumberFormat(locale).formatToParts()द्वारा संचालित। - बड़े पूर्णांक परिशुद्धता हानि।
2⁵³ − 1 = 9 007 199 254 740 991से ऊपर के पूर्णांकnumberके रूप में संग्रहीत होने पर चुपचाप परिशुद्धता खो देते हैं। Twitter ID, Stripe ID, ब्लॉकचेन लेनदेन हैश सभी इसे पार करते हैं। उन्हें स्ट्रिंग के रूप में प्राप्त करें याBigIntका उपयोग करें;Intl.NumberFormatमूल रूप से BigInt स्वीकार करता है। - Stripe-शैली छोटी इकाइयाँ। Stripe $4.99 के लिए
amount: 499भेजता है। फॉर्मेटिंग से पहले 100 से (या मुद्रा के लिए ISO 4217 छोटी-इकाई गणना से) विभाजित करें। JPY, KRW, VND, ISK, HUF 0 छोटी इकाइयों का उपयोग करते हैं, विभाजन की आवश्यकता नहीं। - प्रतिशत इनपुट एक भिन्न है।
new Intl.NumberFormat('en', {style: 'percent'}).format(0.5)0.5%नहीं,50%लौटाता है। यदि आपने इसे प्रतिशत के रूप में संग्रहीत किया है तो फॉर्मेटिंग से पहले अपने संग्रहीत मूल्य को 0.01 से गुणा करें। - हॉट लूप में NumberFormat का निर्माण। प्रत्येक कंस्ट्रक्टर कॉल ICU लोकेल डेटा लोड करता है। कॉल पर एक एकल इंस्टेंस का पुन: उपयोग करें: कैश किए गए इंस्टेंस के साथ 1M फॉर्मेट V8 में ~60ms लेते हैं, यदि आप हर बार ताज़ा बनाते हैं तो ~3s।
- दो दशमलव स्थानों के साथ JPY।
¥1000.00गलत लगता है क्योंकि JPY में 0 छोटी इकाइयाँ हैं। JPY, KRW, VND, ISK, HUF, CLP के लिएminimumFractionDigits: 0, maximumFractionDigits: 0सेट करें।
अधिक अक्सर पूछे जाने वाले प्रश्न
0.1 + 0.2 0.3 के बराबर क्यों नहीं है?
क्योंकि IEEE 754 बाइनरी फ्लोट दशमलव भिन्न 0.1 को सटीक रूप से संग्रहीत नहीं कर सकते, उसी तरह जैसे आधार 10 1/3 को सटीक रूप से संग्रहीत नहीं कर सकता। 0.1 के निकटतम 64-बिट double लगभग 0.1000000000000000055511151231257827021181583404541015625 है। दो ऐसे अनुमानों को जोड़ने से एक परिणाम मिलता है जो 0.3 के बजाय 0.30000000000000004 तक राउंड होता है। हर IEEE 754 भाषा में यह व्यवहार है: Java, Python, C++, Swift, सभी। सटीक दशमलव अंकगणित के लिए, पूर्णांक सेंट या decimal.js / Python के Decimal / Java के BigDecimal जैसी लाइब्रेरी का उपयोग करें।
Intl.NumberFormat और toLocaleString में क्या अंतर है?
समान इंजन, अलग एर्गोनॉमिक्स। (1234.5).toLocaleString('de-DE', {style: 'currency', currency: 'EUR'}) और new Intl.NumberFormat('de-DE', {style: 'currency', currency: 'EUR'}).format(1234.5) समान आउटपुट उत्पन्न करते हैं। अंतर: Intl.NumberFormat पुन: उपयोग योग्य है, इसलिए यदि आप समान विकल्पों के साथ कई नंबर फॉर्मेट करते हैं, एक बार इंस्टेंशिएट करें और कैश करें। toLocaleString हर कॉल पर कंस्ट्रक्टर विकल्पों को पढ़ता है और तंग लूप में नाटकीय रूप से धीमा है।
भारतीय संख्या प्रणाली कैसे काम करती है?
भारतीय अंग्रेजी और हिंदी अंकों को 3-3-3 के बजाय 2-2-3 पैटर्न में समूहित करती हैं: सबसे दाहिने तीन अंक, फिर दो के समूह। 100,000 को 1,00,000 लिखा जाता है और इसे एक लाख (10⁵) कहा जाता है। 10,000,000 को 1,00,00,000 लिखा जाता है और इसे एक करोड़ (10⁷) कहा जाता है। Intl.NumberFormat('en-IN').format(12345678) 1,23,45,678 लौटाता है। सिस्टम अरब (10⁹) और खरब (10¹¹) तक विस्तारित होता है हालांकि वे आधुनिक उपयोग में दुर्लभ हैं।
यह उपकरण कितनी बड़ी संख्या संभाल सकता है?
Number.MAX_SAFE_INTEGER = 2⁵³ − 1 = 9,007,199,254,740,991 तक, कोई भी पूर्णांक एक राउंड ट्रिप को बिल्कुल जीवित रहता है। उसके आगे, परिशुद्धता रिसने लगती है। JSON.parse("9007199254740993") 9007199254740992 लौटाता है, निकटतम प्रतिनिधित्व योग्य double। बड़े मूल्यों के लिए, उन्हें BigInt शाब्दिक के रूप में चिपकाएं (अंत में n के साथ) या उन्हें स्ट्रिंग के रूप में मानें। फॉर्मेटर दोनों स्वीकार करता है।
क्या मेरा नंबर कहीं भेजा जाता है?
नहीं। Intl.NumberFormat और लोकेल डेटा आपके ब्राउज़र के साथ शिप होते हैं; पूरी पाइपलाइन स्थानीय रूप से चलती है। DevTools में नेटवर्क टैब खोलें और एक नंबर फॉर्मेट करें, आप शून्य आउटबाउंड अनुरोध देखेंगे। वेतन, राजस्व, खाता शेष, या किसी भी डेटा के लिए सुरक्षित जिसे आप होस्ट की गई सेवा में नहीं चिपकाएंगे।