किसी संख्या के लिए हजारों स्थान पर अल्पविराम जोड़ने के लिए .NET String.Format ()


852

मैं एक नंबर के लिए हजारों जगह में एक अल्पविराम जोड़ना चाहता हूं।

String.Format()?

जवाबों:


1216
String.Format("{0:n}", 1234);  // Output: 1,234.00
String.Format("{0:n0}", 9876); // No digits after the decimal point. Output: 9,876

39
String.Format("{0:#,##0}", 1234);कोई दशमलव स्थानों के साथ भी काम करता है।
ग्रेग ब्रे

9
मैं "एन" निर्दिष्टक को कैसे दोहरा सकता हूं लेकिन संख्या में जितने दशमलव अंक मौजूद हैं?
स्टीफन ड्रू

56
@Justin: के अनुसार msdn.microsoft.com/en-us/library/0c899ak8.aspx , ',' ( '।' और) सही स्थानीय वर्णों के साथ प्रतिस्थापित कर रहे हैं।
रोजर लिप्सकॉम्ब

@RogerLipscombe मैंने महसूस नहीं किया था कि
जस्टिन

6
@VVVV - तो आप शायद एक संख्या के बजाय एक स्ट्रिंग में गुजर रहे हैं । यदि आपके पास एक स्ट्रिंग है, तो आपको पहले फ्लोट या डबल में बदलने की आवश्यकता है। कोशिश करेंstring.Format("{0:n0}", Double.Parse(yourValue));
टूलमेकरसैट

378

मुझे यह सबसे सरल तरीका लगा:

myInteger.ToString("N0")

1
आप इसे स्ट्रिंग के साथ भी उपयोग कर सकते हैं। स्टॉर्म के रूप में। स्टॉर्म.फॉर्म में ("यहां कॉमा के साथ कुछ संख्या है, और कोई दशमलव नहीं है, {0: N0}", 123456789 (;
डैन मॉर्फिस

16
यह नहीं होना चाहिए myInteger.ToString ("N0") ... string.tostring मुझे नहीं लगता कि यह काम करेगा।
टेलर ब्राउन

1
मुझे पता है कि अब 5 साल हो गए हैं, लेकिन धन्यवाद! यह संख्याओं> 4 वर्णों और <4 वर्णों के लिए काम करता है।
Askyous

@AskYous - ठीक है, यह 4 वर्णों के लिए भी काम करता है .. शायद यह भी कहे कि यह किसी भी लम्बाई के लिए काम करता है।
ब्रूट्स वेम्ब नोव

यह काम कर रहा है लेकिन यह क्षेत्रीय सेटिंग्स पर बदल रहा है
saulyasar

149
int number = 1000000000;
string whatYouWant = number.ToString("#,##0");
//You get: 1,000,000,000

27
यह समाधान एक अंतर्राष्ट्रीयकरण के दृष्टिकोण से अच्छा नहीं है - अन्य संस्कृतियां ,हजारों विभाजक के रूप में अन्य पात्रों का उपयोग करती हैं , उदाहरण के लिए एक स्थान या यहां तक ​​कि .
जस्टिन

6
धन्यवाद काम करता है। 1. 1. बढ़ाया गया है, इसलिए 2 डीपी नंबर तक दर्शाया गया है। StString ("#, ## 0। ##")
केकड़ा बाल्टी

8
@MacSigler यह वास्तव में सच नहीं है, ऊपर दिए गए जवाब पर रोजर लिप्सकॉम्ब की टिप्पणी देखें: String.Format स्थानीयकरण को स्वचालित रूप से लागू करेगा।
दान बेचर

10
@MacSigler वह बात है, हालांकि, यह कोड हमेशा कॉमा का प्रिंट आउट नहीं लेता है । केवल जब संस्कृति एक है जो कॉमा की अपेक्षा करती है (जैसे एन-यूएस या अपरिवर्तनीय)। यदि संस्कृति वह है जो किसी अन्य विभाजक (जैसे ) की अपेक्षा करती है , तो .NET स्वचालित रूप से अल्पविराम को उस विभाजक से बदल देगा। फिर, मैं आपको रोजर द्वारा पोस्ट किए गए लिंक को पढ़ने का आग्रह करता हूं यदि आप अभी भी यह नहीं समझते हैं कि यह क्यों है। .
डैन बेहार्ड

4
@MacSigler जस्टिन की टिप्पणी अभी भी सही है कि अगर आप स्पष्ट रूप से संस्कृति को एन-यूएस के लिए मजबूर नहीं करते हैं तो यह स्थानीय मशीन से संस्कृति सेटिंग्स को प्राप्त करेगा। मेरी समझ यह है कि ऊपर दिए गए कोड को संकलित करना, फिर इसे दो मशीनों पर अलग-अलग संस्कृतियों (विभिन्न संख्या विभाजकों के साथ) पर चलाना अलग-अलग परिणाम उत्पन्न करेगा। यदि आप चाहते हैं कि यह हमेशा अल्पविराम का निर्माण करे, तो आपको स्पष्ट रूप से एक संस्कृति का उपयोग करने की आवश्यकता है जो अल्पविराम का उपयोग करती है (उदाहरण के लिए)।
डैन बेहार्ड

98

यदि आप संस्कृति विशिष्ट चाहते हैं, तो आप यह कोशिश करना चाहते हैं:

(19950000.0).ToString("N",new CultureInfo("en-US")) = 19,950,000.00

(19950000.0).ToString("N",new CultureInfo("is-IS")) = 19.950.000,00

नोट: कुछ संस्कृतियाँ ,दशमलव का उपयोग करने के बजाय .सावधानी बरतने का उपयोग करती हैं।


77

मानक प्रारूप, उनके संबंधित आउटपुट के साथ,

Console.WriteLine("Standard Numeric Format Specifiers");
String s = String.Format("(C) Currency: . . . . . . . . {0:C}\n" +
                    "(D) Decimal:. . . . . . . . . {0:D}\n" +
                    "(E) Scientific: . . . . . . . {1:E}\n" +
                    "(F) Fixed point:. . . . . . . {1:F}\n" +
                    "(G) General:. . . . . . . . . {0:G}\n" +
                    "    (default):. . . . . . . . {0} (default = 'G')\n" +
                    "(N) Number: . . . . . . . . . {0:N}\n" +
                    "(P) Percent:. . . . . . . . . {1:P}\n" +
                    "(R) Round-trip: . . . . . . . {1:R}\n" +
                    "(X) Hexadecimal:. . . . . . . {0:X}\n",
                    - 1234, -1234.565F);
Console.WriteLine(s);

उदाहरण आउटपुट (एन-यू कल्चर):

(C) Currency: . . . . . . . . ($1,234.00)
(D) Decimal:. . . . . . . . . -1234
(E) Scientific: . . . . . . . -1.234565E+003
(F) Fixed point:. . . . . . . -1234.57
(G) General:. . . . . . . . . -1234
    (default):. . . . . . . . -1234 (default = 'G')
(N) Number: . . . . . . . . . -1,234.00
(P) Percent:. . . . . . . . . -123,456.50 %
(R) Round-trip: . . . . . . . -1234.565
(X) Hexadecimal:. . . . . . . FFFFFB2E

2
इस उत्तर ने बहुत सारी उपयोगी जानकारी को पैक कर दिया। उदाहरण से सीखना अब मैं देखता हूं कि स्ट्रिंग प्रारूप में 0 और 1 का क्या अर्थ है।
user420667

41

यह सबसे अच्छा प्रारूप है। उन सभी मामलों में काम करता है:

String.Format( "{0:#,##0.##}", 0 ); // 0
String.Format( "{0:#,##0.##}", 0.5 ); // 0.5 - some of the formats above fail here. 
String.Format( "{0:#,##0.##}", 12314 ); // 12,314
String.Format( "{0:#,##0.##}", 12314.23123 ); // 12,314.23
String.Format( "{0:#,##0.##}", 12314.2 ); // 12,314.2
String.Format( "{0:#,##0.##}", 1231412314.2 ); // 1,231,412,314.2

1
क्या होगा यदि मैं दशमलव विभाजक के रूप में हजार विभाजक और अल्पविराम के रूप में डॉट्स चाहता हूं?
FrenkyB

अपवित्र क्योंकि यह 12,314.0 (n1 प्रारूप की तरह) प्रदर्शित नहीं करता है, लेकिन 12,314 :)
NDUF

34
String.Format("{0:#,###,###.##}", MyNumber)

जो आपको प्रासंगिक बिंदुओं पर कॉमा देगा।


10
": N" विधि बेहतर है क्योंकि इसे उपयोगकर्ता के स्थान का सम्मान करना चाहिए।
टॉर्लैक

12
यह सच है, लेकिन यह आपको हजार बिंदुओं पर कॉमा देने की गारंटी नहीं है क्योंकि यह उपयोगकर्ता के लोकेल का सम्मान करता है।
स्टीफन राइटन

2
आप पर सही: यह सच है, लेकिन यह उपयोगकर्ता के स्थान का सम्मान करने की गारंटी नहीं है क्योंकि यह हजारों विभाजक के रूप में अल्पविराम का उपयोग करता है। (एक उदाहरण के रूप में, पुर्तगाल में कॉमा की जगह दशमलव विभाजक है।)
एवेज़

1
यदि आप मूल्यों को लागू करना चाहते हैं। आपको # msdn.microsoft.com/en-us/library/0c899ak8(v=vs.110).aspx के साथ # को बदलने की आवश्यकता है : शून्य मौजूद होने पर संबंधित अंक के साथ शून्य को बदलता है; अन्यथा, परिणाम स्ट्रिंग में शून्य दिखाई देता है, जबकि "#" प्रतीक को उसी अंक के साथ प्रतिस्थापित किया जाता है यदि कोई मौजूद है; अन्यथा, परिणाम स्ट्रिंग में कोई अंक नहीं दिखाई देता है।
क्लेरिस बोउवर

मेरी आवश्यकता के लिए इस विधि ने ठीक काम किया, Int32.ToString विधि के बारे में msdn पृष्ठ जो एक प्राथमिक स्थान होगा जिसका उपयोग msdn.microsoft.com/en-us/library/8wch342y.aspx इस विशेष के लिए उपयोगी नहीं होगा। आवेदन या तो
stackuser83

33

सबसे अधिक मतदान का जवाब बहुत अच्छा था और लगभग 7 वर्षों के लिए सहायक था। C # 6.0 और विशेष रूप से स्ट्रिंग इंटरपोलेशन की शुरूआत के साथ एक neater और, IMO सुरक्षित है, जो करने के लिए कहा गया है to add commas in thousands place for a number:

var i = 5222000;
var s = $"{i:n} is the number"; // results to > 5,222,000.00 is the number
s = $"{i:n0} has no decimal"; // results to > 5,222,000 has no decimal

जहां चर i को प्लेसहोल्डर (यानी {0}) के स्थान पर रखा जाता है । इसलिए यह याद रखने की आवश्यकता नहीं है कि कौन सी वस्तु किस स्थिति में जाती है। स्वरूपण (यानी :n) नहीं बदला है। नया क्या है, इसकी पूरी सुविधा के लिए, आप इस पृष्ठ पर जा सकते हैं



21

यदि आप संस्कृति की परवाह किए बिना "," विभाजक को ट्रेस करना चाहते हैं (उदाहरण के लिए ट्रेस या लॉग संदेश में), तो निम्न कोड काम करेगा और इसमें अगले व्यक्ति को यह बताने का अतिरिक्त लाभ होगा कि जो आप कर रहे हैं, वह वास्तव में ठोकर खाए।

int integerValue = 19400320; 
string formatted = string.Format(CultureInfo.InvariantCulture, "{0:N0}", integerValue);

"19,400,320" पर सेट किया गया


21

निम्न उदाहरण कई मानों को प्रदर्शित करता है जो कस्टम प्रारूप स्ट्रिंग का उपयोग करके स्वरूपित होते हैं जिसमें शून्य प्लेसहोल्डर शामिल होते हैं।

String.Format("{0:N1}", 29255.0);

या

29255.0.ToString("N1")

परिणाम "29,255.0"

String.Format("{0:N2}", 29255.0);

या

29255.0.ToString("N2")

परिणाम "29,255.00"


अच्छा जवाब लेकिन 29.255,00 के बारे में क्या?
रॉक्सी’प्रो

@ Roxy'Pro स्थानीय / संस्कृति को बदलें?
मार्टेन बॉड्यूस

@MaartenBodewes मैंने सोचा था कि "N1", "F1" या smth जैसे = के समान पत्र है =) लेकिन
जप

11
int num = 98765432;
Console.WriteLine(string.Format("{0:#,#}", num));

3
या कंसोल। क्राइटलाइन ("{0: #, #}", संख्या); यदि आप इसे प्रिंट करना चाहते हैं। लेकिन string.Format (...) अधिक उपयोगी है जो मुझे लगता है।
Indy9000

11

स्ट्रिंग के बजाय स्ट्रिंग इंटरपोलेशन का उपयोग करते हुए सरल,

 $"{12456:n0}"; // 12,456
 $"{12456:n2}"; // 12,456.00

या अपने उपयोग करने योग्य है

 double yourVariable = 12456.0;
 $"{yourVariable:n0}"; 
 $"{yourVariable:n2}"; 

9

उदाहरण के लिए String.Format("{0:0,0}", 1); रिटर्न 01, मेरे लिए मान्य नहीं है

यह मेरे लिए काम करता है

19950000.ToString("#,#", CultureInfo.InvariantCulture));

उत्पादन 19,950,000


8

ध्यान दें कि आप जो प्रारूपण कर रहे हैं वह संख्यात्मक होना चाहिए। ऐसा लगता नहीं है कि यह एक संख्या का एक स्ट्रिंग प्रतिनिधित्व करेगा और प्रारूप कॉमा के साथ है।



5

सी # 7.1 (शायद पहले!) यह स्ट्रिंग के प्रक्षेप के साथ आसान और अच्छा दिखने वाला बनाता है:

var jackpot = 1000000;
var niceNumberString = $"Jackpot is {jackpot:n}";
var niceMoneyString = $"Jackpot is {jackpot:C}";

3

आप एक फ़ंक्शन का उपयोग कर सकते हैं जैसे कि संख्याओं को प्रारूपित करना और वैकल्पिक रूप से वांछित दशमलव स्थानों में पास करना। यदि दशमलव स्थान निर्दिष्ट नहीं हैं, तो यह दो दशमलव स्थानों का उपयोग करेगा।

    public static string formatNumber(decimal valueIn=0, int decimalPlaces=2)
    {
        return string.Format("{0:n" + decimalPlaces.ToString() + "}", valueIn);
    }

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


-2

संस्कृतियों और संभावित स्वरूपण मुद्दों के बारे में मैं अब और चिंता नहीं करता था, यह है कि मैंने इसे मुद्रा के रूप में स्वरूपित किया और बाद में मुद्रा प्रतीक को निकाल लिया।

if (decimal.TryParse(tblCell, out result))

{
  formattedValue = result.ToString("C").Substring(1);
}

6
यह कोड स्वतंत्र संस्कृति नहीं है - यह कोड चलाने वाली मशीन पर जो भी डिफ़ॉल्ट संस्कृति सेट है उसका उपयोग करेगी। यह अवांछित उत्पादन पैदा कर सकता है, जहां यह संस्कृति आरंभ के बजाय संख्या के अंत में अपने मुद्रा प्रतीकों को रखती है fr-FR(जैसे da-DK), या मुद्रा को निरूपित करने के लिए एक से अधिक वर्णों का उपयोग करता है (जैसे ), या कॉमा का उपयोग करके हजारों को अलग नहीं करता है (उदाहरण के लिए ) यूरोप की मुख्य भूमि)।
21

-2

नीचे जावा में एक अच्छा समाधान है, हालांकि!

NumberFormat fmt = NumberFormat.getCurrencyInstance();
System.out.println(fmt.format(n));

या अधिक मजबूत तरीके से आप किसी विशेष स्थान के स्थान को प्राप्त करना चाहते हैं, तो नीचे के रूप में उपयोग कर सकते हैं:

int n=9999999;
Locale locale = new Locale("en", "US");
NumberFormat fmt = NumberFormat.getCurrencyInstance(locale);
System.out.println(fmt.format(n));

यूएस लोकल आउट : $ 9,999,999.00

जर्मन लोकेल आउटपुट

Locale locale = new Locale("de", "DE");

OUTPUT: 9.999.999,00 €

भारतीय स्थानीय उत्पादन

Locale locale = new Locale("de", "DE");

OUTPUT: Rs.9,999,999.00

एस्टोनियाई लोकेल आउटपुट

Locale locale = new Locale("et", "EE");

OUTPUT: 9 999 999 €

जैसा कि आप अलग-अलग आउटपुट में देख सकते हैं कि आपको विभाजक को अल्पविराम या बिंदु या यहां तक ​​कि अंतरिक्ष के बारे में चिंता करने की आवश्यकता नहीं है, आप i18n मानकों के अनुसार स्वरूपित संख्या प्राप्त कर सकते हैं


1
आपने चर का उपयोग कहाँ किया था locale ??
स्मिथ

अच्छी तरह से सही ढंग से स्पॉट किया गया है, क्या यह मुद्रा की आवृत्ति प्राप्त करते समय उपयोग किए जाने वाले infact है: NumberFormat fmt = NumberFormat.getCurrencyInstance (locale); कोड को सही किया, धन्यवाद!
अनिरुद्ध

3
क्या आपने टैग की जाँच की है? सवाल सी # जावा के बारे में नहीं है!
सालार

-3

यदि आप इसे DataGridview में दिखाना चाहते हैं, तो आपको इसका प्रकार बदलना चाहिए, क्योंकि डिफ़ॉल्ट स्ट्रिंग है और चूंकि आप इसे दशमलव में बदलते हैं, इसे फ्लोटिंग पॉइंट के साथ संख्या के रूप में माना जाता है

Dim dt As DataTable = New DataTable
dt.Columns.Add("col1", GetType(Decimal))
dt.Rows.Add(1)
dt.Rows.Add(10)
dt.Rows.Add(2)

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