2011-03-08 9 views
74

मैं वर्तमान में निम्नलिखित कोड का उपयोग में दशमलव विभाजक के रूप में एक डबल मुद्रित करने के लिए मैं एक बिंदु का उपयोग करना चाहता हूँ। क्या इसे करने का कोई आसान तरीका है?बल ("।") बिंदु जावा

+0

आप सटीक दशमलव के साथ डबल मूल्य का उपयोग कर की जरूरत है, हो सकता है है आपको डबल/डबल के बजाय BigDecimal का उपयोग करना चाहिए। डबल वैरिएबल का उपयोग करते समय आपको जिन मुद्दों का सामना करना पड़ सकता है, उनके लिए यह [लिंक] (http://stackoverflow.com/questions/15625556/java-adding-and-subtracting-doubles-are-giving-strange-results) देखें। आप यह भी कोशिश कर सकते हैं: System.out.println (5.1d + 1.1d); परिणाम 6.2 के बजाय 6.199 99 99 99 99 99 99 होगा। मुझे लगता है कि कोई व्यक्ति दशकों के साथ संख्याओं को प्रारूपित करने के तरीके को देख रहा है क्योंकि स्ट्रिंग को डबल चर को छोड़ना होगा। – razvanone

उत्तर

136

String.format का अधिभार तो आप स्थान निर्दिष्ट कर सकते हैं जो का उपयोग करें:

return String.format(Locale.ROOT, "%.2f", someDouble); 

आप केवल एक नंबर स्वरूपण कर रहे हैं - के रूप में आप यहाँ हैं - तो NumberFormat का उपयोग कर शायद और अधिक उपयुक्त होगा। लेकिन अगर आपको String.format की शेष स्वरूपण क्षमताओं की आवश्यकता है, तो यह ठीक काम करना चाहिए।

+4

Locale.ROOT अधिक तटस्थ है। – speedogoo

+0

@ स्पीडोगू: संपादित, हालांकि मुझे संख्या स्वरूपण के लिए संदेह है, इससे कोई फर्क नहीं पड़ता है। –

+1

हाँ, लेकिन आपको यूएस और यूके के बीच चयन करने की आवश्यकता नहीं है। – speedogoo

0

आप नंबरफॉर्मेट और डेसिमलफॉर्मैट का उपयोग कर सकते हैं।

जावा ट्यूटोरियल से इस लिंक पर एक नजर डालें LocaleSpecific Formatting

नामक अनुभाग लोकेल के प्रति संवेदनशील प्रारूपण तुम क्या जरूरत है।

9

आप एक अतिरिक्त लोकेल java.lang.String.format करने के साथ ही करने के लिए java.io.PrintStream.printf (जैसे System.out.printf()) पारित कर सकते हैं:

import java.util.Locale; 

public class PrintfLocales { 

    public static void main(String args[]) { 
     System.out.printf("%.2f: Default locale\n", 3.1415926535); 
     System.out.printf(Locale.GERMANY, "%.2f: Germany locale\n", 3.1415926535); 
     System.out.printf(Locale.US, "%.2f: US locale\n", 3.1415926535); 
    } 

} 

इस में जो परिणाम (मेरे पीसी पर) के बाद:

$ java PrintfLocales 
3.14: Default locale 
3,14: Germany locale 
3.14: US locale 

String.format देखें जावा एपीआई में।

+4

आप 'out.printf ((लोकेल) नल, ...) 'या' out.format ((लोकेल) शून्य, ...) 'लोकेल स्वतंत्र प्रतिनिधित्व प्राप्त करने के लिए भी उपयोग कर सकते हैं। (और वहां भी ['लोकेल.रोओटी'] है (http://docs.oracle.com/javase/6/docs/api/java/util/Locale.html#ROOT)) – eckes

18

एक और अधिक कठोर समाधान मुख्य रूप से अपने लोकेल को मुख्य() में सेट करना है।

तरह:

Locale.setDefault(new Locale("en", "US")); 
+6

यह एक _very_ समस्याग्रस्त उत्तर है, क्योंकि इसका वैश्विक प्रभाव है, इस प्रकार कई अन्य (संभवतः अवांछित) परिवर्तन हो सकते हैं। – sleske

4

रास्ता बहुत देर हो चुकी है, लेकिन अन्य यहाँ उल्लेख किया NumberFormat का नमूना उपयोग (और इसके उपवर्ग DecimalFormat)

public static String format(double num) { 
    DecimalFormatSymbols decimalSymbols = DecimalFormatSymbols.getInstance(); 
    decimalSymbols.setDecimalSeparator('.'); 
    return new DecimalFormat("0.00", decimalSymbols).format(num); 
} 
संबंधित मुद्दे