जावा में डबल प्रारूप करने के लिए String.format ()


178

मैं String.format (प्रारूप String, X) का उपयोग कैसे कर सकता हूं, इस प्रकार दोहरा प्रारूप तैयार करने के लिए ???

2354548.235 -> 2,354,548.23

धन्यवाद!

जवाबों:


295
String.format("%1$,.2f", myDouble);

String.format स्वचालित रूप से डिफ़ॉल्ट लोकेल का उपयोग करता है।


36
आप एक विशिष्ट लोकेल का उपयोग करके भी उपयोग कर सकते हैंString.format(Locale.GERMAN, "%1$,.2f", myDouble);
ओलिवियर ग्रेजायर

13
यदि प्रारूप में एक से अधिक दोहरे हैं, तो% 1,% 2, आदि का उपयोग करें। उदाहरण के लिए String.format ("% 1 $। 2f,% 2 $, 2f", myDouble, aDouble)
Moesio

4
मेरा मानना ​​है कि इस मामले में "% 1 $" वैकल्पिक है। प्रारूप स्ट्रिंग के रूप में मेरे लिए बस "%, 2f" के साथ काम करता है।
मैट पासेल

5
हाँ, मैट सही है। %1, %2और इसी तरह अपने इनपुट तर्कों के सूचकांक के आधार पर आउटपुट को फिर से ऑर्डर करने के लिए इस्तेमाल किया जा सकता है। देखें इस । आप सूचकांक को छोड़ सकते हैं और डिफ़ॉल्ट आदेश फॉर्मेटर द्वारा ग्रहण किया जाएगा।
प्रणीतलोके

1
आपको एक स्पष्टीकरण देना चाहिए कि विभिन्न भागों का क्या मतलब है।
मीतुल बत्ती

41
String.format("%4.3f" , x) ;

इसका मतलब है कि हमें ans में कुल 4 अंक चाहिए, जिनमें से 3 दशमलव के बाद होने चाहिए। और f डबल का फॉर्मेट स्पेसिफ़ायर है। x का अर्थ है वह चर जिसके लिए हम उसे ढूंढना चाहते हैं। मेरे लिए काम किया। । ।


1
मुझे लगता है कि इसका मतलब है कि यह उन तर्कों में चौथा चर होगा, जो दशमलव के बाद 3 स्थान रखते हैं।
माइकल फुल्टन

@MichaelFulton यह इतना आसान नहीं है: String.format("%014.3f" , 58.656565)-> 0000000058,657: 14 प्रतीक कुल में: 8 शून्य और 5 संख्या और 1 अल्पविराम। तो इस मामले में संख्या का 14 मतलब है कि प्रतीकों की कुल संख्या (अतिरिक्त लोगों को अग्रणी शून्य के साथ बदल दिया जाता है, बिना जा सकता है, फिर यह परिणाम स्ट्रिंग में स्थान के साथ बदल जाएगा) । यहां .3हिस्सा पूरी तरह से स्वतंत्र है।
पारसीकर

हालांकि यहां: String.format("%014.3f" , 58.656565)-> 58,657। मैं इसे लेता हूं क्योंकि वरीयता .3fभाग में जाती है: यह पहले 3 दशमलव स्थानों के साथ संख्या को प्रिंट करता है और उसके बाद यदि प्रतीक हैं तो यह प्रमुख स्थानों (या शून्य / जो भी) प्रिंट करता है। इस मामले में संख्या 2 + 3 + 1 = 6 प्रतीक है और हम केवल 4 प्रिंट करना चाहते थे, इसलिए निश्चित रूप से कोई अतिरिक्त स्थान नहीं हैं।
पारसीकर

24

यदि आप इसे मैन्युअल रूप से सेट किए गए प्रतीकों के साथ प्रारूपित करना चाहते हैं, तो इसका उपयोग करें:

DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator('.');
decimalFormatSymbols.setGroupingSeparator(',');
DecimalFormat decimalFormat = new DecimalFormat("#,##0.00", decimalFormatSymbols);
System.out.println(decimalFormat.format(1237516.2548)); //1,237,516.25

हालांकि, लोकेल-आधारित प्रारूपण को प्राथमिकता दी जाती है।


3
उपयोगी उत्तर! हालांकि, अंतिम वाक्य "लोकेल-आधारित स्वरूपण को प्राथमिकता दी जाती है, हालांकि" संदर्भ के बिना कोई मतलब नहीं है। जब आप स्ट्रिंग के एक विशिष्ट प्रारूप को उत्पन्न करना चाहते हैं तो बहुत अच्छे उपयोग के मामले हैं जहां आपको लोकेल-आधारित प्रारूपण का उपयोग नहीं करना चाहिए। उदाहरण के लिए, आप अपने डेटा के निर्यात को एक बाहरी फ़ाइल पर लागू कर रहे हैं और आप प्रारूप पर पूर्ण नियंत्रण रखना चाहते हैं, वर्तमान (या किसी भी) स्थान पर निर्भर नहीं हैं।
होनज़ा ज़िदक

20

इस लिंक से निकाले गए कोड ;

Double amount = new Double(345987.246);
NumberFormat numberFormatter;
String amountOut;

numberFormatter = NumberFormat.getNumberInstance(currentLocale);
amountOut = numberFormatter.format(amount);
System.out.println(amountOut + " " + 
                   currentLocale.toString());

इस उदाहरण से आउटपुट दिखाता है कि एक ही नंबर का प्रारूप लोकेल के साथ कैसे बदलता है:

345 987,246  fr_FR
345.987,246  de_DE
345,987.246  en_US

13
public class MainClass {
   public static void main(String args[]) {
    System.out.printf("%d %(d %+d %05d\n", 3, -3, 3, 3);

    System.out.printf("Default floating-point format: %f\n", 1234567.123);
    System.out.printf("Floating-point with commas: %,f\n", 1234567.123);
    System.out.printf("Negative floating-point default: %,f\n", -1234567.123);
    System.out.printf("Negative floating-point option: %,(f\n", -1234567.123);

    System.out.printf("Line-up positive and negative values:\n");
    System.out.printf("% ,.2f\n% ,.2f\n", 1234567.123, -1234567.123);
  }
}

और प्रिंट आउट लें:

3 (3) +3 00003
डिफ़ॉल्ट फ़्लोटिंग-पॉइंट प्रारूप: 1234567,123000
फ्लोटिंग-पॉइंट विद कॉमा: 1.234.567,123000
नकारात्मक फ़्लोटिंग-पॉइंट डिफ़ॉल्ट: -1.234.567,123000
नकारात्मक फ़्लोटिंग-पॉइंट विकल्प: (1.234.567, 123,000)

लाइन-अप सकारात्मक और नकारात्मक मान:
1.234.567,12
-1.234.567,12


2

ऐसा करने के कई तरीके हैं। उन लोगों को दिया जाता है:

मान लीजिए कि आपका मूल नंबर बलो दिया गया है: डबल नंबर = 2354548.235;

NumberFormatमोड का उपयोग करना और गोल करना

NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
    DecimalFormat decimalFormatter = (DecimalFormat) nf;
    decimalFormatter.applyPattern("#,###,###.##");
    decimalFormatter.setRoundingMode(RoundingMode.CEILING);

    String fString = decimalFormatter.format(number);
    System.out.println(fString);

स्ट्रिंग फॉर्मेटर का उपयोग करना

System.out.println(String.format("%1$,.2f", number));

सभी मामलों में आउटपुट होगा: 2354548.24

नोट :

गोलाई के दौरान आप RoundingModeअपने फॉर्मेटर में जोड़ सकते हैं । यहां कुछ राउंडिंग मोड दिए गए हैं:

    decimalFormat.setRoundingMode(RoundingMode.CEILING);
    decimalFormat.setRoundingMode(RoundingMode.FLOOR);
    decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN);
    decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
    decimalFormat.setRoundingMode(RoundingMode.UP);

यहाँ आयात हैं :

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;

1

उपयोग DecimalFormat

 NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
 DecimalFormat decimalFormatter = (DecimalFormat) nf;
 decimalFormatter.applyPattern("#,###,###.##");
 String fString = decimalFormatter.format(myDouble);
 System.out.println(fString);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.