जावा में हजारों विभाजक कैसे सेट करें?


129

जावा में हजारों विभाजक कैसे सेट करें?
मेरे पास एक बिगडेसिमल का स्ट्रिंग प्रतिनिधित्व है जिसे मैं हजारों विभाजक के साथ प्रारूपित करना चाहता हूं और स्ट्रिंग के रूप में वापस करना चाहता हूं।


क्या आपको ये मान डीबी से मिल रहे हैं?
मृत प्रोग्रामर

जवाबों:


110

यह काम करना चाहिए (JavaDoc पर आधारित)

DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();

symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(bd.longValue()));

JavaDoc के अनुसार, पहली पंक्ति में कलाकारों को अधिकांश स्थानों के लिए सहेजा जाना चाहिए।


16
पर इस untested टिप्पणी: के लिए जावाडोक getDecimalFormatSymbols()का कहना है: Returns: a copy of the desired DecimalFormatSymbols। इसलिए आपको setDecimalFormatSymbols(theCopy)कॉपी बदलने के बाद उपयोग करना चाहिए ।
java.is.for.desktop

6
Bd.longValue () के लिए डॉक्स का कहना है कि "किसी भी आंशिक भाग को छोड़ दिया जाएगा"। इसलिए मैं नहीं जानता कि क्या यह ऐसा करने का सबसे अच्छा तरीका है यदि आप सटीकता के बारे में परवाह करते हैं
कोडिंगुसर

2
मुझे लगता है कि आप इसका उपयोग कर सकते हैं newऔर इसे वापस DecimalFormatSymbols customSymbol = new DecimalFormatSymbols(); customSymbol.setDecimalSeparator(decimalSeperator.charAt(0)); customSymbol.setGroupingSeparator(thousandSeperator); formatter.setDecimalFormatSymbols(customSymbol);
ली यी होंग

मुझे लगता है कि आप विभाजक के रूप में \ u00a0 (नॉन-ब्रेकिंग स्पेस) का उपयोग करना चाहेंगे। यह कुछ स्थानों के लिए डिफ़ॉल्ट है।
ACV

3
आप लोंगवैल्यू क्यों कहते हैं? सवाल बिगडेक्विमल के लिए हजारों ऑपरेटर स्थापित करने का था, लंबे समय तक नहीं।
फिन्कारसाइड

232

आप "," के साथ प्रारूप फ़ंक्शन का उपयोग कर सकते हैं;

int no = 124750;
String str = String.format("%,d", no);

//str = 124,750

"," स्थानीय-विशिष्ट समूहीकरण वर्ण शामिल हैं।

डॉक्स


11
क्या होगा यदि मैं .एक विभाजक के रूप में उपयोग करना चाहता हूं ?
एनिशय

जैसा कि मैं आमतौर पर String.format का उपयोग करता हूं यह मेरे लिए सबसे अच्छा और आसान है!
अली

17
कॉल @Enissay format()एक स्पष्ट स्थान के साथ ( Local.USउपयोग करने के लिए जाना जाता है ,एक विभाजक के रूप में) और फिर की जगह ,अपने कस्टम विभाजक के साथ: String.format(Locale.US, "%,d", n).replace(',', '.')
मिनीपिफ

java.util.IllegalFormatConversionException:% d प्रारूप नहीं कर सकता java.lang.String तर्कों
ईमान मारशी

1
@ImanMarashi ने इसे कास्ट किया int। या ए long। या ए BigInteger। और यदि आप उपयोग करना चाहते हैं तो च का उपयोग करें double, floatया BigDecimal
अदोरावथ

57
BigDecimal bd = new BigDecimal(300000);

NumberFormat formatter = NumberFormat.getInstance(new Locale("en_US"));

System.out.println(formatter.format(bd.longValue()));

संपादित करें

अंतरिक्ष जैसे कस्टम समूहन विभाजक प्राप्त करने के लिए, यह करें:

DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance();
symbols.setGroupingSeparator(' ');

DecimalFormat formatter = new DecimalFormat("###,###.##", symbols);
System.out.println(formatter.format(bd.longValue()));

मुझे पता है कि मुझे DecimalFormatSymbols setGroupingSeparator का उपयोग करने की आवश्यकता है, लेकिन मुझे नहीं पता कि इसे मेरे BigDecimal पर कैसे लागू किया जाए
Funtime

1
@ फ़ंटाइम: आप "इसे अपने बिगडेसिमल पर लागू न करें"। आप NumberFormatइच्छित गुणों के साथ एक ऑब्जेक्ट का निर्माण करते हैं और इसका उपयोग अपने स्वरूपित करने के लिए करते हैं BigDecimal। एक BigDecimalही एक निर्दिष्ट मूल्य है, यह नहीं है एक निर्धारित प्रारूप है।
जोकिम सॉर

1
ध्यान दें कि हजारों विभाजक आम तौर पर एक गैर-ब्रेकिंग स्पेस है (जब यह एक स्थान होता है)
cquezel

DecimalFormatSymbols प्रतीकों = नए DecimalFormatSymbols () में 2 विकल्प में शीर्ष पंक्ति को बदलना पड़ा; इसके लिए काम करना है।
पेपरथिक

14

इस कोड को प्रारूपित करने का प्रयास करें जैसा कि ब्राज़ील में किया गया है:

    DecimalFormat df = new DecimalFormat(
      "#,##0.00", 
      new DecimalFormatSymbols(new Locale("pt", "BR")));

    BigDecimal value = new BigDecimal(123456.00);

    System.out.println(df.format(value.floatValue()));

    // results: "123.456,00"

2
आप भी यह कोशिश करते हैं, JasperReports के मामले में, प्रारूप को सही बनाने के लिए: parameters.put("REPORT_LOCALE", new Locale("pt", "BR")); इस पैरामीटर को रिपोर्ट करने के लिए भेजें।
डैलसाविया

8

यदि आप Integer data type 1 के लिए हजार विभाजक का उपयोग कर रहे हैं।

  1. पूर्णांक डेटा प्रकार के लिए

String.format ("%, d \ n", 58625) और आउटपुट 58,625 होगा

  1. फ्लोटिंग पॉइंट डेटा के लिए String.format ("%, 2f", 58625.21) और आउटपुट 58,6.2.21 होगा।

यह एक एपिफनी थी। हालांकि, आपको वास्तव में तनाव देना होगा, "", "केवल एक झंडा है, न कि वह चरित्र जिसे समूह विभाजक के रूप में उपयोग करता है। (समस्या का पता लगाने के लिए मुझे कुछ समय लगा।) डॉक्स
javase/

5
DecimalFormatSymbols formatSymbols = new DecimalFormatSymbols();
formatSymbols.setDecimalSeparator('|');
formatSymbols.setGroupingSeparator(' ');

String strange = "#,##0.###";
DecimalFormat df = new DecimalFormat(strange, formatSymbols);
df.setGroupingSize(4);

String out = df.format(new BigDecimal(300000).doubleValue());

System.out.println(out);

4
NumberFormat nf = DecimalFormat.getInstance(myLocale);
DecimalFormatSymbols customSymbol = new DecimalFormatSymbols();
customSymbol.setDecimalSeparator(',');
customSymbol.setGroupingSeparator(' ');
((DecimalFormat)nf).setDecimalFormatSymbols(customSymbol);
nf.setGroupingUsed(true);

3

स्वीकार किए गए उत्तर को वास्तव में बदलना होगा अन्यथा काम नहीं करना चाहिए। GetDecimalFormatSymbols एक रक्षात्मक प्रतिलिपि बनाता है। इस प्रकार,

DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();

symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(bd.longValue()));

नई पंक्ति यह एक है: formatter.setDecimalFormatSymbols (प्रतीक);


2

के लिए दशमलव :

DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
DecimalFormat dfDecimal = new DecimalFormat("###########0.00###");
dfDecimal.setDecimalFormatSymbols(symbols);
dfDecimal.setGroupingSize(3);
dfDecimal.setGroupingUsed(true);
System.out.println(dfDecimal.format(number));

1

जैसा कि ऊपर उल्लेख किया गया है, निम्न लिंक आपको विशिष्ट देश कोड देता है जो जावा को संख्या को स्थानीय बनाने की अनुमति देता है। हर देश की अपनी शैली होती है।

ऊपर दिए गए लिंक में आपको देश कोड मिलेगा जिसे यहाँ रखा जाना चाहिए:

...(new Locale(<COUNTRY CODE HERE>));

उदाहरण के लिए स्विट्जरलैंड निम्नानुसार संख्याओं को प्रारूपित करता है:

1000.00 -> 1'000.00

देश कोड

इसे प्राप्त करने के लिए, निम्नलिखित कोड मेरे लिए काम करते हैं:

NumberFormat nf = NumberFormat.getNumberInstance(new Locale("de","CH"));
nf.setMaximumFractionDigits(2);
DecimalFormat df = (DecimalFormat)nf;
System.out.println(df.format(1000.00));

परिणाम अपेक्षित है:

1'000.00

1
public String formatStr(float val) {
 return String.format(Locale.CANADA, "%,.2f", val);
}

formatStr(2524.2) // 2,254.20



हालांकि यह कोड प्रश्न का हल प्रदान कर सकता है, इसलिए संदर्भ जोड़ना बेहतर है कि यह क्यों / कैसे काम करता है। यह भविष्य के उपयोगकर्ताओं को सीखने में मदद कर सकता है, और उस ज्ञान को अपने कोड में लागू कर सकता है। जब कोड समझाया जाता है, तो आपको उपयोगकर्ताओं से upvotes के रूप में सकारात्मक प्रतिक्रिया मिलने की संभावना होती है।
बोरवम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.