कॉमा और राउंड करने के लिए मैं स्ट्रिंग संख्या कैसे प्रारूपित कर सकता हूं?


142

निम्नलिखित संख्या को प्रारूपित करने का सबसे अच्छा तरीका क्या है जो मुझे स्ट्रिंग के रूप में दिया गया है?

String number = "1000500000.574" //assume my value will always be a String

मैं चाहता हूं कि यह मूल्य के साथ एक स्ट्रिंग हो: 1,000,500,000.57

मैं इसे इस तरह कैसे प्रारूपित कर सकता हूं?

जवाबों:


256

आप DecimalFormatकक्षा को देखना चाह सकते हैं ; यह विभिन्न स्थानों का समर्थन करता है (उदाहरण के लिए: कुछ देशों में 1.000.500.000,57इसके बजाय स्वरूपित किया जाएगा)।

आपको उस स्ट्रिंग को एक संख्या में बदलने की भी आवश्यकता है, इसे इसके साथ किया जा सकता है:

double amount = Double.parseDouble(number);

कोड नमूना:

String number = "1000500000.574";
double amount = Double.parseDouble(number);
DecimalFormat formatter = new DecimalFormat("#,###.00");

System.out.println(formatter.format(amount));

क्या आप इस बात का उदाहरण दिखा सकते हैं कि मैं इस विशेष मामले के साथ नंबरफॉर्म का उपयोग कैसे कर सकता हूं?
शीहान आलम

1
आप नीचे दिए गए समाधान का भी उपयोग कर सकते हैं - सार्वजनिक स्थैतिक स्ट्रिंग getRoundOffValue (डबल मान) {DecimalFormat df = new DecimalFormat ("##, ##, ##, ##, ##, ## 0.00"); वापसी df.format (मूल्य); }
जितेंद्र नाथ

मैं दशमलव से पहले शून्य को पसंद करता हूं जैसे कि डेसीमलफॉर्मैट फॉर्मेट = नया डेसीमलफोर्मैट ("#, ## 0.00"); - शून्य के लिए .00 मेरे लिए गलत लगता है
लियो

45

यह String.format () का उपयोग करके भी पूरा किया जा सकता है, जो आसान और / या अधिक लचीला हो सकता है यदि आप एक स्ट्रिंग में कई संख्याओं को प्रारूपित कर रहे हैं।

    String number = "1000500000.574";
    Double numParsed = Double.parseDouble(number);

    System.out.println(String.format("The input number is: %,.2f", numParsed));
    // Or
    String numString = String.format("%,.2f", numParsed);

प्रारूप स्ट्रिंग के लिए "%, 2f" - "," का अर्थ है अलग-अलग अंकों के समूह अल्पविराम से, और ".2" का अर्थ है दशमलव के बाद दो स्थानों पर गोल।

अन्य स्वरूपण विकल्पों पर संदर्भ के लिए, https://docs.oracle.com/javase/tutorial/java/data/numberformat.html देखें


42

एक बार जब आप अपने स्ट्रिंग को एक नंबर में बदल लेते हैं, तो आप उपयोग कर सकते हैं

// format the number for the default locale
NumberFormat.getInstance().format(num)

या

// format the number for a particular locale
NumberFormat.getInstance(locale).format(num)

दोनों दशमलव और गोल (2) को कैसे निर्दिष्ट करें ?
जोनिक

6
आह, कोई बात नहीं, यह पाया:new DecimalFormat("0.##", DecimalFormatSymbols.getInstance(locale))
जोनीक

16

यह देखते हुए कि यह Google का नंबर एक परिणाम है format number commas java, यहां एक जवाब है जो उन लोगों के लिए काम करता है जो पूरे नंबर के साथ काम कर रहे हैं और दशमलव के बारे में परवाह नहीं करते हैं।

String.format("%,d", 2000000)

आउटपुट:

2,000,000

फ्लोट के लिए भी काम करता है, उदाहरण के लिए, प्रिंटफ ("%, f \ n", दशमलवनंबर)
फिलवॉक

12

मैंने अपनी स्वरूपण उपयोगिता बनाई है। जो आपको कई सुविधाएँ देने के साथ स्वरूपण के प्रसंस्करण में बहुत तेज है :)

यह समर्थन करता है:

  • कोमा फॉर्मेटिंग एग 1234567 1,234,567 हो जाता है।
  • "हजार (के), मिलियन (एम), बिलियन (बी), ट्रिलियन (टी)" के साथ उपसर्ग।
  • 15 के माध्यम से 0 की शुद्धता।
  • प्रिसिजन री-साइजिंग (यदि आप 6 अंकीय परिशुद्धता चाहते हैं, लेकिन केवल 3 उपलब्ध अंक हैं, तो यह इसे 3 पर लागू करता है)।
  • उपसर्ग कम करना (यदि आप जो उपसर्ग चुनते हैं वह बहुत बड़ा है तो यह अधिक उपयुक्त उपसर्ग को कम करता है)।

यहां कोड पाया जा सकता है । आप इसे इस तरह कहते हैं:

public static void main(String[])
{
   int settings = ValueFormat.COMMAS | ValueFormat.PRECISION(2) | ValueFormat.MILLIONS;
   String formatted = ValueFormat.format(1234567, settings);
}

मुझे यह भी इंगित करना चाहिए कि यह दशमलव समर्थन को संभालता नहीं है, लेकिन पूर्णांक मानों के लिए बहुत उपयोगी है। उपरोक्त उदाहरण आउटपुट के रूप में "1.23M" दिखाएगा। मैं शायद दशमलव समर्थन जोड़ सकता हूं, लेकिन तब तक इसके लिए बहुत अधिक उपयोग नहीं देखा गया था, तब से मैं इसे एक बिगइन्टेगर प्रकार में विलय कर सकता हूं जो संपीड़ित चार [] गणित संगणना के लिए सरणियों को संभालता है।


2
यह अच्छा है यदि आप केवल अंग्रेजी भाषा में काम कर रहे हैं। मेरा सुझाव है कि इस तरह की किसी भी चीज़ से बचें क्योंकि यह मेरे गैर-अंग्रेज़ी उपयोगकर्ताओं के खाने को पेश करती है क्योंकि वे समझ नहीं पा रहे थे कि इसका क्या अर्थ Kया Mअर्थ है
रिषभमंज

@rishabhjn लेकिन ... क्या आप इसे केवल किसी भी पत्र को संशोधित करने के लिए बदल सकते हैं जिसकी आपको आवश्यकता है? क्या आपका दुर्भाग्य उसकी गलती है? : ओ और जो उसने बनाया वह काफी शांत है, बावजूद लिंक अभी अनुपलब्ध है ..
कुंभ राशि

@AquariusPower समस्या यह है, उदाहरण के लिए, जापानी संख्याएँ मीट्रिक प्रणाली का पालन नहीं करती हैं। उनकी संख्या 100 के लिए 1 百, 1000 के लिए 1 千, 10000 के लिए 1 千 की तरह होती है, फिर 1000,0000 के लिए 1 百 हो जाती है। मेरी टीम जावास्क्रिप्ट में कुछ इसी तरह से काम कर रही थी। आप इसमें वर्णित तर्क का उपयोग कर सकते हैं: github.com/statusbrew/angular-bignumber
rishabhmhjn

इसके लिए मेरा पुराना कोड मिला, इसलिए मैंने इसे GitHub में पुनः लोड किया। टिप्पणी में लिंक अपडेट किया गया है।
जेरेमी ट्रिफ़िलो

6
public void convert(int s)
{
    System.out.println(NumberFormat.getNumberInstance(Locale.US).format(s));
}

public static void main(String args[])
{
    LocalEx n=new LocalEx();
    n.convert(10000);
}

6

आप नीचे दिए गए समाधान का भी उपयोग कर सकते हैं -

public static String getRoundOffValue(double value){

        DecimalFormat df = new DecimalFormat("##,##,##,##,##,##,##0.00");
        return df.format(value);
}

4

आप निम्न कोड का उपयोग करके एक पंक्ति में संपूर्ण रूपांतरण कर सकते हैं:

String number = "1000500000.574";
String convertedString = new DecimalFormat("#,###.##").format(Double.parseDouble(number));

DecimalFormat कंस्ट्रक्टर में अंतिम दो # संकेत भी 0s हो सकते हैं। किसी भी तरह से काम करता है।


3

पहला उत्तर बहुत अच्छा काम करता है, लेकिन ZERO / 0 के लिए यह .00 के रूप में प्रारूपित होगा

इसलिए प्रारूप #, ## 0.00 मेरे लिए अच्छा काम कर रहा है। उत्पादन प्रणाली को लागू करने से पहले हमेशा विभिन्न संख्याओं जैसे 0/100 / 2334.30 और नकारात्मक संख्याओं का परीक्षण करें।


3

यहां पहुंचने का सबसे सरल तरीका है:

String number = "10987655.876";
double result = Double.parseDouble(number);
System.out.println(String.format("%,.2f",result)); 

आउटपुट: 10,987,655.88

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