जावा में डबल दशमलव स्वरूपण


118

मुझे कुछ समस्याओं का प्रारूपण करने में कठिनाई हो रही है। यदि मेरे पास एक डबल मान है, उदाहरण के लिए 4.0, तो मैं दशमलव को कैसे प्रारूपित करूं ताकि यह 4.00 के बजाय हो?


का उपयोग करके देखें String.format()या java.text.Format
कोड-अपरेंटिस


जवाबों:


218

इसका एक तरीका नंबरफार्मेट का उपयोग करना होगा ।

NumberFormat formatter = new DecimalFormat("#0.00");     
System.out.println(formatter.format(4.0));

आउटपुट:

4.00


1
हाँ, लेकिन मुझे अल्पविराम नहीं चाहिए, मुझे एक दशमलव चिह्न चाहिए।
क्रिस्टोफर

मुझे अल्पविराम मिल रहा है। यह जो मैंने किया है। "डबल वैरिएबल; नंबरफ़ॉर्मैट फॉर्मेटर = नया डेसीमलफोर्मैट (" # 0.00 "); System.out.println (formatter.format (वेरिएबल));
क्रिस्टोफर

इसके लिए आउटपुट X, 00 है और X.00 नहीं
क्रिस्टोफर

9
आपके JVM द्वारा प्रयुक्त डिफ़ॉल्ट भाषा के कारण आपको अल्पविराम मिल रहा है, जो संभवत: नंबरी के अलग है। NumberFormat javadoc पर एक नजर डालें: docs.oracle.com/javase/1.4.2/docs/api/java/text/…
माइकल

1
जैसा कि zim2001 ने बताया, आपका स्थान भिन्न हो सकता है। मेरे उत्तर में दिए गए लिंक को पढ़ें। अंत में आपको इस बारे में जानकारी मिल जाएगी।
कोसा

73

जावा 8 के साथ, आप formatविधि का उपयोग कर सकते हैं ..: -

System.out.format("%.2f", 4.0); // OR

System.out.printf("%.2f", 4.0); 
  • ffloatingबिंदु मूल्य के लिए प्रयोग किया जाता है।
  • 2 दशमलव के बाद, दशमलव स्थानों की संख्या के बाद .

अधिकांश जावा संस्करणों के लिए, आप उपयोग कर सकते हैं DecimalFormat: -

    DecimalFormat formatter = new DecimalFormat("#0.00");
    double d = 4.0;
    System.out.println(formatter.format(d));

43

String.format का उपयोग करें :

String.format("%.2f", 4.52135);

डॉक्स के अनुसार:

हमेशा इस्तेमाल किया जाने वाला लोकेल वही होता है, जो उसके द्वारा लौटाया जाता है Locale.getDefault()


8
String.format भी दशमलव संकेत स्वरूपण के लिए पहले पैरामीटर के रूप में एक स्थान को स्वीकार करता है।
विन्सेन्ट मिमौन-प्रात:

4
स्थानीय-विशिष्ट दशमलव संकेतों (जैसे अल्पविराम) से बचने के लिए, US लोकेल निर्दिष्ट करें: String.format (Locale.US, "%। 2f", 4.52135);
अलेक्जेंडर

3
मैं कहता हूं "एक दशमलव चिह्न के रूप में यूएस लोकेल-विशिष्ट डॉट का उपयोग करने के लिए, यूएस लोकेल को निर्दिष्ट करें" .. यह विचार कि यूएस की आदतें सही हैं और बाकी सब कुछ "लोक" सामान है जो मुझे पागल करता है।
सिमोन गियानी

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

19

String.format का उपयोग करके, आप यह कर सकते हैं:

double price = 52000;
String.format("$%,.2f", price);

कॉमा को नोटिस करें जो इसे @ विंसेंट के उत्तर से अलग बनाता है

आउटपुट:

$52,000.00

स्वरूपण के लिए एक अच्छा संसाधन विषय पर आधिकारिक जावा पेज है


6

आप हमेशा स्थैतिक विधि का उपयोग कर सकते हैं printf from System.out- फिर आप संबंधित फॉर्मेटर को लागू करेंगे; यह हीप स्पेस बचाता है जिसमें अन्य उदाहरणों के लिए आपको करना आवश्यक है।

उदाहरण के लिए:

System.out.format("%.4f %n", 4.0); 

System.out.printf("%.2f %n", 4.0); 

बचत स्थान को बचाता है जो एक बहुत बड़ा बोनस है, फिर भी मैं यह मानता हूं कि यह उदाहरण किसी भी अन्य उत्तर की तुलना में बहुत अधिक प्रबंधनीय है, खासकर जब से अधिकांश प्रोग्रामर सी से प्रिंटफ फ़ंक्शन को जानते हैं (जावा हालांकि फ़ंक्शन / विधि को थोड़ा बदलता है)।


1
@ बाज मैं यहाँ एक महत्वपूर्ण विवरण याद कर रहा हूँ, कोई प्रिंटस्ट्रीम उल्लिखित नहीं है। ओपी मानक आउटपुट स्ट्रीम को स्वरूपण सहायता (जावा डॉक्स को देखकर और अधिक आसानी से हल किया जा सकता है) के लिए पूछ रहा है। के बारे में बताएं।
लुईस रोबिन्स

मेरी गलती। गलत javadoc संस्करण (1.4) को देख रहा था। BTW: outहै PrintStream
बज़

@ बाज कोई चिंता नहीं। हां, मैंने मान लिया कि आप जिस वर्ग का जिक्र कर रहे हैं, मेरी सभी किताबों में Printf को System.out से स्टैटिक विधि के रूप में जाना जाता है (जैसा कि वे तरीके स्टैटिक हैं)।
लुईस रॉबिंस

1
सटीक होना, printfकी एक स्थिर विधि है PrintStreamयहाँ देखें ;) लेकिन +1 फिर भी।
बाज

@Baz डॉक्स से PrintStream क्लास को System.out विरासत में मिला। मैं शायद गलत हो सकता हूं - हालांकि एक स्थैतिक विधि का वारिस करना काफी अजीब है (क्या यह भी संभव है)? आप कर रहे हैं, मैं हालांकि सही उम्मीद है।
लेविस रॉबिंस



1

एक वैकल्पिक विधि कक्षा setMinimumFractionDigitsसे विधि का उपयोग करती है NumberFormat

यहां आप मूल रूप से निर्दिष्ट करते हैं कि दशमलव बिंदु के बाद आप कितने नंबर दिखाना चाहते हैं।

तो , आपकी निर्दिष्ट राशि 2 थी मानकर एक इनपुट का 4.0उत्पादन होगा 4.00

लेकिन, यदि आपके Doubleइनपुट में निर्दिष्ट राशि से अधिक है, तो यह निर्दिष्ट न्यूनतम राशि लेगा, फिर ऊपर और नीचे एक और अंक जोड़ दें

उदाहरण के लिए, 4.154654542 निर्दिष्ट न्यूनतम राशि के साथ उत्पादन होगा4.155

NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
Double myVal = 4.15465454;
System.out.println(nf.format(myVal));

इसे ऑनलाइन आज़माएं


1

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

मान लीजिए कि आपका मूल नंबर bellow दिया गया है:

 double number = 2354548.235;

नंबरफॉर्म का उपयोग करना:

NumberFormat formatter = new DecimalFormat("#0.00");
    System.out.println(formatter.format(number));

String.format का उपयोग करना:

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

DecimalFormat और पैटर्न का उपयोग करना:

NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
        DecimalFormat decimalFormatter = (DecimalFormat) nf;
        decimalFormatter.applyPattern("#,###,###.##");
        String fString = decimalFormatter.format(number);
        System.out.println(fString);

DecimalFormat और पैटर्न का उपयोग करना

DecimalFormat decimalFormat = new DecimalFormat("############.##");
        BigDecimal formattedOutput = new BigDecimal(decimalFormat.format(number));
        System.out.println(formattedOutput);

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

नोट :

गोलाई के दौरान आप 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

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

  1. यदि आप उपयोग कर रहे हैं java.text.DecimalFormat

    DecimalFormat decimalFormat = NumberFormat.getCurrencyInstance(); 
    decimalFormat.setMinimumFractionDigits(2); 
    System.out.println(decimalFormat.format(4.0));

    या

    DecimalFormat decimalFormat =  new DecimalFormat("#0.00"); 
    System.out.println(decimalFormat.format(4.0)); 
  2. यदि आप इसे सरल स्ट्रिंग प्रारूप में बदलना चाहते हैं

    System.out.println(String.format("%.2f", 4.0)); 

उपरोक्त सभी कोड 4.00 प्रिंट होंगे


0

100% काम करता है।

import java.text.DecimalFormat;

public class Formatting {

    public static void main(String[] args) {
        double value = 22.2323242434342;
        // or  value = Math.round(value*100) / 100.0;

        System.out.println("this is before formatting: "+value);
        DecimalFormat df = new DecimalFormat("####0.00");

        System.out.println("Value: " + df.format(value));
    }

}

-3

पहला आयात NumberFormat। फिर इसे जोड़ें:

NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();

यह आपको दो दशमलव स्थान देगा और यदि यह मुद्रा के साथ काम कर रहा है तो एक डॉलर चिह्न लगाएगा।

import java.text.NumberFormat;
public class Payroll 
{
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) 
    {
    int hoursWorked = 80;
    double hourlyPay = 15.52;

    double grossPay = hoursWorked * hourlyPay;
    NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();

    System.out.println("Your gross pay is " + currencyFormatter.format(grossPay));
    }

}

1
प्रश्न मुद्रा प्रदर्शित करने के बारे में नहीं है और प्रारूपण कार्यों का उपयोग करके अधिक सटीक रूप से उत्तर दिया गया है) जैसे अन्य उत्तरों में वर्णित है)।
याकूब

-4

आप इसे इस प्रकार कर सकते हैं:

double d = 4.0;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));

1
काम नहीं करता है क्योंकि यह ##इसके बजाय का उपयोग कर रहा है00
जोकिन इर्चुक

-4

मुझे पता है कि यह एक पुराना विषय है, लेकिन अगर आप वास्तव में अल्पविराम के बजाय अवधि को पसंद करते हैं, तो बस अपना परिणाम X, 00 के रूप में एक स्ट्रिंग में सहेजें और फिर बस इसे अवधि के लिए बदल दें ताकि आपको X.00 मिल जाए

सबसे आसान तरीका है बस प्रतिस्थापित का उपयोग करें।

String var = "X,00";
String newVar = var.replace(",",".");

आउटपुट X.00 आप चाहते थे। इसे आसान बनाने के लिए आप इसे एक ही बार में कर सकते हैं और इसे एक दोहरे चर में सहेज सकते हैं:

Double var = Double.parseDouble(("X,00").replace(",",".");

मुझे पता है कि यह उत्तर अभी उपयोगी नहीं है, लेकिन हो सकता है कि कोई व्यक्ति जो इस मंच की जाँच करता है, वह इस तरह के त्वरित समाधान की तलाश करेगा।

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