2011-10-19 11 views
18

मैं विभिन्न स्थानों पर विदेशी मुद्राओं को प्रारूपित करने का एक तरीका खोजने के लिए अपना सर्वश्रेष्ठ प्रयास कर रहा हूं जो जावा का उपयोग करके उस मुद्रा के लिए डिफ़ॉल्ट नहीं हैं। मुझे java.util.Currency मिला है, जो विभिन्न स्थानों के लिए उपयोग करने के लिए उचित प्रतीक का प्रतिनिधित्व कर सकता है। यही है, अमरीकी डालर के लिए, यह मुझे यूएस में $, और यूएस $ या यूएसडी अन्य देशों में प्रतीक प्रदान करता है। इसके अलावा, मुझे java.text.NumberFormat मिला है, जो एक विशिष्ट लोकेल के लिए एक मुद्रा प्रारूपित करेगा। मेरी समस्या - उपयोग। कुरेंसी अपने गैर-डिफ़ॉल्ट स्थानों में मुद्राओं का प्रतिनिधित्व करने के लिए उचित प्रतीकों और कोड प्रदान करेगी, लेकिन किसी भी लोकेल-विशिष्ट तरीके से मुद्रा को प्रारूपित नहीं करेगी। नंबरफॉर्मैट मानता है कि एक लोकेल के साथ मैं जिस नंबर को पास करता हूं, वह उस स्थानीय स्थान पर है, विदेशी मुद्रा नहीं है।जावा में विदेशी लोकेल में मुद्राओं को स्वरूपित करना

उदाहरण के लिए, यदि मैं getCurrencyInstance (Locale.GERMANY) का उपयोग करता हूं और फिर प्रारूप (1000) मानता है कि मैं 1000 यूरो स्वरूपित कर रहा हूं। हकीकत में, मुझे अमरीकी, या येन या किसी अन्य मुद्रा के लिए सही जर्मन-स्थानीय प्रतिनिधित्व (सही दशमलव और हजारों विभाजक, राशि को पहले या बाद में रखना है) की आवश्यकता हो सकती है। सबसे अच्छा मैं अभी तक प्राप्त करने में सक्षम हूं, संख्याफॉर्मैट का उपयोग करके एक संख्या को प्रारूपित करना है, फिर गैर अंकों वाले अक्षरों के लिए आउटपुट खोजें और उन्हें उपयोग से प्राप्त प्रतीकों के साथ प्रतिस्थापित करें। मुद्रा। हालांकि, यह बहुत ही भंगुर है, और संभवतः मेरे उद्देश्यों के लिए पर्याप्त विश्वसनीय नहीं है। विचार? किसी भी प्रकार की मदद की बेहद सराहना की जाती है।

+0

'1)', आप जीयूआई में कहीं इस डेटा को प्रदर्शित करने के लिए कर रहे हैं '2)' मैं कोशिश कभी नहीं (आईएसओ CCY कोड के साथ बाद में बदल दिया गया है इस आपरेशन नहीं किया है प्रासंगिक) तो मेरा सवाल है कि आपने यूएसडी, एयूडी, एसजीडी के लिए प्रिंट_आउट प्रतीक का प्रयास किया है, शायद $, '3) 'मैं सुझाव देता हूं कि आईएसओ कोड देखने के लिए अलग-अलग लोकेल मिश्रण और सेट करें, उदाहरण के लिए http:// www।oanda.com/help/currency-iso-code-country लेकिन Google से पहले, – mKorbel

+0

इससे संबंधित कारण हैं कि आपको एक आदिम 'अपने-अपने-अपने' में धन संग्रहित नहीं करना चाहिए: वे एक वर्ग का हिस्सा होना चाहिए वे मुद्रा का प्रतिनिधित्व भी करते हैं (500 अमरीकी डालर _not_ 500 येन है)। –

+0

क्या आपने नीचे दिया गया जवाब देखा था? क्या इससे समस्या हल हो जाती है? – les2

उत्तर

40

उदाहरण getCurrencyInstance (Locale.GERMANY) द्वारा दिया

टूटी पर setCurrency उपयोग करके देखें:

java.text.NumberFormat format = java.text.NumberFormat.getCurrencyInstance(java.util.Locale.GERMANY); 
System.out.println(format.format(23)); 

आउटपुट: 23,00 €

फिक्स्ड:

java.util.Currency usd = java.util.Currency.getInstance("USD"); 
java.text.NumberFormat format = java.text.NumberFormat.getCurrencyInstance(java.util.Locale.GERMANY); 
format.setCurrency(usd); 
System.out.println(format.format(23)); 

आउटपुट: 23,00 डालर

+1

एक आकर्षण की तरह काम करता है! धन्यवाद! – JPittard

+0

आपने इसे मैन्युअल कोडिंग करने से बचाया !!! lol: डी –

+2

बेहतर चेकआउट टेस्टो टेस्टिनी का जवाब नीचे। – les2

22

मैं, https://stackoverflow.com/a/7828512/1536382 मुझे विश्वास है कि भिन्न अंकों की संख्या, इसे मैन्युअल रूप से सेट किया जाना चाहिए मुद्रा से नहीं लिया जाता है les2 से जवाब देने के लिए नहीं तो अगर ग्राहक (NumberFormat) जापान स्थान है जोड़ना होगा और मुद्रा यूरो या एन_यूएस है, तो राशि अंश के अंकों के बिना 'ला' येन प्रदर्शित की जाती है, लेकिन यह उम्मीद नहीं की जाती है क्योंकि यूरो दशमलव में प्रासंगिक हैं, जापानी के लिए भी ;-)।

तो les2 उदाहरण format.setMaximumFractionDigits(usd.getDefaultFractionDigits()); जोड़ने में सुधार किया जा सकता है, उदाहरण के उस विशेष मामले में प्रासंगिक नहीं है, लेकिन यह दशमलव और लोकेल के साथ एक संख्या का उपयोग करके प्रासंगिक हो जाता है। जापान को नंबरफॉर्मैट के लिए लोकेल के रूप में।

java.util.Currency usd = java.util.Currency.getInstance("USD"); 
    java.text.NumberFormat format = java.text.NumberFormat.getCurrencyInstance(
      java.util.Locale.JAPAN); 
    format.setCurrency(usd); 
    System.out.println(format.format(23.23)); 
    format.setMaximumFractionDigits(usd.getDefaultFractionDigits()); 
    System.out.println(format.format(23.23)); 

इच्छा उत्पादन:

USD23 
USD23.23 

NumberFormat code में कुछ इसी तरह प्रारूप के प्रारंभिक/डिफ़ॉल्ट मुद्रा के लिए किया जाता है, विधि DecimalFormat#adjustForCurrencyDefaultFractionDigits बुला। जब मुद्रा NumberFormat.setCurrency

+0

अच्छा पकड़ो। यह वास्तव में एक उपयोगिता पुस्तकालय, उदाहरण के लिए, कॉमन्स-मुद्रा होने के लिए पर्याप्त कठिन है। क्या कोई अस्तित्व में है? CurrencyUtils.getFormatter (लोकेल, मुद्रा) .format (BigDecimal) – les2

+0

किसी भी व्यक्ति के लिए इसे छोड़कर जो इस व्यवहार से काटा जा सकता है: एंड्रॉइड (विशेष रूप से, सैमसंग गैलेक्सी नोट 2 4.3 के साथ), लोकेल de_CH (Deutsch (Schweiz)) के साथ, यदि मुझे डिफ़ॉल्ट मुद्रा फॉर्मेटर मिलता है, और सेट सेट कूरेंसी ("सीएडी"), मुझे "स्वीडिश" राउंडिंग मिल जाएगी। यही है, 26.98 का ​​मूल्य 27.00 तक स्वरूपित हो जाता है! लेकिन setCurrency ("USD") के साथ, मुझे यह व्यवहार नहीं दिख रहा है। उपरोक्त के रूप में कॉलिंग मैक्सिमफ्रैक्शनडिजिट्स() चीजों को हल करने लगता है, लेकिन यह मुझे समझ में नहीं आता है, क्योंकि सीएडी और यूएसडी दोनों डिफ़ॉल्ट रूप से 2 आंशिक अंक का उपयोग करते हैं। – gnuf

+0

यह केवल प्रदर्शित किए गए अंश अंकों की अधिकतम संख्या के लिए समस्या हल करता है। बाकी सब कुछ, जैसे गोल करने वाले व्यवहार और मुद्रा प्रतीक की नियुक्ति निर्दिष्ट लोकेल के लिए मूल मुद्रा की सेटिंग्स रखेगी। – mpontes

5
import java.util.*; 
import java.text.*; 

public class Solution { 

    public static void main(String[] args) { 
     Scanner scanner = new Scanner(System.in); 
     double payment = scanner.nextDouble(); 
     scanner.close(); 

     NumberFormat lp; //Local Payment 

     lp = NumberFormat.getCurrencyInstance(Locale.US); 
     System.out.println("US: " + lp.format(payment)); 

     lp = NumberFormat.getCurrencyInstance(new Locale("en", "in")); 
     System.out.println("India: " + lp.format(payment)); 

     lp = NumberFormat.getCurrencyInstance(Locale.CHINA); 
     System.out.println("China: " + lp.format(payment)); 

     lp = NumberFormat.getCurrencyInstance(Locale.FRANCE); 
     System.out.println("France: " + lp.format(payment)); 
    } 
} 
+0

यह कुछ देशों के लिए मुद्रा फ़ॉर्मेटर के लिए एक पूर्ण कोड है। – Ankush

1
Scanner scanner = new Scanner(System.in); 
double payment = scanner.nextDouble(); 
scanner.close(); 
java.text.NumberFormat formatUS = java.text.NumberFormat.getCurrencyInstance(java.util.Locale.US); 
String us=formatUS.format(payment); 
java.text.NumberFormat formatIn = java.text.NumberFormat.getCurrencyInstance(new java.util.Locale("en","in")); 
String india=formatIn.format(payment); 
java.text.NumberFormat formatChina = java.text.NumberFormat.getCurrencyInstance(java.util.Locale.CHINA); 
String china=formatChina.format(payment); 
java.text.NumberFormat formatFrance = java.text.NumberFormat.getCurrencyInstance(java.util.Locale.FRANCE); 
String france=formatFrance.format(payment); 

System.out.println("US: " + us); 
System.out.println("India: " + india); 
System.out.println("China: " + china); 
System.out.println("France: " + france); 
संबंधित मुद्दे