हज़ारों लोगों को अल्पविराम से स्ट्रिंगर में परिवर्तित करना


181

मैं एक हज़ार 35634646 को हज़ार में बदलना चाहता हूँ "," इसलिए यह 35,634,646 होना चाहिए।

ऐसा करने का सबसे तेज तरीका क्या होगा?

जवाबों:


291
System.out.println(NumberFormat.getNumberInstance(Locale.US).format(35634646));
Output: 35,634,646

5
मुझे जोड़ना था import java.text.NumberFormat;
माइक एस

6
यह यूएस स्टाइल ग्रुपिंग को मजबूर करता है जो हमेशा उपयोग करता है ,, हालांकि .इसके बजाय ग्रुपिंग के लिए उपयोग करने वाले क्षेत्र भी हैं । एक शब्द में, किसी लोकेल को हार्ड-कोडिंग करना एक बुरा अभ्यास माना जाता है।
हाई झांग

4
@DreaminginCode इसे अच्छी तरह Locale.getCurrent()से करने के लिए समाधान है
रोजर RV

@RogerRV कोई Locale.getCurrent () नहीं है (कम से कम Android पर)
E.Akio

यह उन 96% लोगों के लिए सबसे अच्छा जवाब नहीं है जो संयुक्त राज्य अमेरिका में नहीं रहते हैं
अंजीर

152

आप सबसे जल्दी पूछते हैं, लेकिन शायद आपका मतलब "सबसे अच्छा" या "सही" या "ठेठ" है?

आप कॉमा से हजारों को इंगित करने के लिए भी कहते हैं, लेकिन शायद आपका मतलब "अपने उपयोगकर्ता के स्थानीय रिवाज के अनुसार सामान्य मानव पठनीय रूप में है"?

आप इसे इस प्रकार करें:

    int i = 35634646;
    String s = NumberFormat.getIntegerInstance().format(i);

अमेरिकियों को "35,634,646" मिलेंगे

जर्मनों को "35.634.646" मिलेगा

स्विस जर्मन को मिलेगा "35'634'646"


मुझे प्रत्येक स्थान का नंबर पैटर्न कहां मिल सकता है? मैंने कोड को पढ़ने की कोशिश की, लेकिन इसे कहीं भी नहीं पाया
nhoxbypass


41

पूर्णांकों:

int value = 100000; 
String.format("%,d", value); // outputs 100,000

डबल्स:

double value = 21403.3144d;
String.format("%,.2f", value); // outputs 21,403.31

String.format बहुत शक्तिशाली है।

- प्रति व्यक्ति प्रतिपुष्टि प्रतिक्रिया।


1
फायदा: कोई "नया" नहीं, कचरा संग्रहकर्ता (DecimalFormat के विपरीत) को लोड नहीं करता है।
कंटैंगो

में देख लो String.format। यह return new Formatter(l) ...आदि के साथ शुरू होता है इसलिए कचरा कलेक्टर तर्क उतना मजबूत नहीं है जितना लगता है।
स्कीथिनॉड

2
यह मेरा पसंदीदा उत्तर है, प्रश्न इंटेगर के साथ काम करने के लिए कहता है, इसलिए यहां कोड है: int value = 100000; String.format ("%, d", मान);
psuzzi

20
 int value = 35634646;
 DecimalFormat myFormatter = new DecimalFormat("#,###");
 String output = myFormatter.format(value);
 System.out.println(output);

आउटपुट: 35,634,646


1
आपके पैटर्न से अधिक की आवश्यकता नहीं है #,###, यदि आप यूरोपीय शैली प्रारूपण चाहते हैं तो आप उपयोग कर सकते हैं #,##,###
अली

7
@ अली: आपके द्वारा वर्णित प्रारूप केवल भारत में उपयोग किया जाता है, और मुझे कम से कम 90% यकीन है कि भारत यूरोप में नहीं है।
केयर्नवॉन

मुझे यह मिल गया ... ठीक है, अगर आपको भारतीय प्रारूपण की आवश्यकता है तो आप इसे कैसे करते हैं।
अली

1
यह लोकेल पर निर्भर है और यदि सही स्थान नहीं है तो सही (प्रश्न के अनुसार) आउटपुट का उत्पादन करेगा, जहां डिफ़ॉल्ट लोकेल एक के साथ हजारों को अलग नहीं करता है ,
एंटक

17

अन्य उत्तर सही हैं, हालांकि उपयोग करने से पहले अपने स्थान की दोबारा जांच करें "%,d":

Locale.setDefault(Locale.US);
int bigNumber = 35634646;
String formattedNumber = String.format("%,d", bigNumber);
System.out.println(formattedNumber);

Locale.setDefault(new Locale("pl", "PL"));
formattedNumber = String.format("%,d", bigNumber);
System.out.println(formattedNumber);

परिणाम:

35,634,646
35 634 646

3

इस समाधान ने मेरे लिए काम किया:

NumberFormat.getNumberInstance(Locale.US).format(Integer.valueOf("String Your Number"));

3

%dअल्पविराम के साथ प्रारूप विनिर्देशक का उपयोग करें :%,d

यह अब तक का सबसे आसान तरीका है।


1

यदि JSP में समान किया जाना है, तो उपयोग करें:

<fmt:formatNumber pattern="#,##0" value="${yourlist.yourintvalue}" var="formattedVariable" />
<c:out value="${formattedVariable}"></c:out>

कई मूल्यों के उपयोग के लिए संभोग:

<c:forEach items="${yourlist}" var="yourlist">

    <fmt:formatNumber pattern="#,##0" value="${yourlist.yourintvalue}" var="formattedVariable" />
    <c:out value="${formattedVariable}"></c:out>
</c:forEach>

1

यहाँ आप में से उन लोगों के लिए एक समाधान है जो न तो "नंबरफॉर्म" का उपयोग कर सकते हैं और न ही "स्ट्रिंगिंगफॉर्म" का उपयोग कर सकते हैं (एक फ्रेम के अंदर जावा के सीमित संस्करण का उपयोग करके)। आशा है कि यह उपयोगी है।

number= 123456789;
thousandsSeparator=",";
myNumberString=number.toString();   
numberLength=myNumberString.length;
howManySeparators=Math.floor((numberLength-1)/3)
formattedString=myNumberString.substring(0,numberLength-(howManySeparators*3))
while (howManySeparators>0)    {
formattedString=formattedString+thousandsSeparator+myNumberString.substring(numberLength-(howManySeparators*3),numberLength-((howManySeparators-1)*3));
howManySeparators=howManySeparators-1;    }

formattedString

अपने कोड में कुछ टिप्पणियों को जोड़ने के लिए अपने जवाब को संपादित करने पर विचार करें (और शायद इसे एक विधि में लपेटें, इसलिए यह अधिक उपयोगी हो सकता है)
noiaverbale

0

एक्सटेंशन का उपयोग करें

import java.text.NumberFormat

val Int.commaString: String
  get() = NumberFormat.getInstance().format(this)

val String.commaString: String
  get() = NumberFormat.getNumberInstance().format(this.toDouble())

val Long.commaString: String
  get() = NumberFormat.getInstance().format(this)

val Double.commaString: String
  get() = NumberFormat.getInstance().format(this)

परिणाम

1234.commaString => 1,234
"1234.456".commaString => 1,234.456
1234567890123456789.commaString => 1,234,567,890,123,456,789
1234.456.commaString => 1,234.456

-1

आप का उपयोग नहीं कर सकते

System.out.printf("%n%,d",int name);

अल्पविराम को अल्पविराम में printfजोड़ना चाहिए%d अंतर।

इसके बारे में सकारात्मक नहीं है, लेकिन मेरे लिए काम करता है।


मेरे लिए यह संकलन नहीं है
Mishx

"इसके बारे में सकारात्मक नहीं।" व्यर्थ।
रोब शेफर्ड

-8

सबसे पहले आपको JSTL टैग को शामिल करना होगा: -

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 

पृष्ठ के प्रारंभ में

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