2010-08-03 22 views
64

मेरे पास BigDecimal फ़ील्ड amount है जो धन का प्रतिनिधित्व करता है, और मुझे $123.00, $15.50, $0.33 जैसे प्रारूप में ब्राउज़र में अपना मान प्रिंट करने की आवश्यकता है।स्वरूपित BigDecimal मान मुद्रित करने के लिए कैसे?

मैं यह कैसे कर सकता हूं?

(केवल सरल उपाय है जो मैं देख रहा हूँ अपने आप को BigDecimal से floatValue हो रही है और उसके बाद अंश भाग के लिए दो अंकों सटीक बनाने के लिए NumberFormat उपयोग कर रहा है)।

उत्तर

94
public static String currencyFormat(BigDecimal n) { 
    return NumberFormat.getCurrencyInstance().format(n); 
} 

यह अपने स्थान का उपयोग अपने मुद्रा प्रतीक चुनने के लिए होगा। NumberFormat's javadoc

30

एक और तरीका है जो किसी परिस्थिति के लिए कोई मतलब सकता है

BigDecimal newBD = oldBD.setScale(2); 

मैं सिर्फ कुछ मामलों में इस वजह कहते हैं कि जब यह पैसे के 2 दशमलव स्थानों से परे जा रहा मतलब नहीं है की बात आती है। इससे एक कदम आगे ले रहा है, इस

String displayString = oldBD.setScale(2).toPlainString(); 

को जन्म दे सकता है, लेकिन मैं केवल setScale विधि (जो भी एक दूसरे राउंडिंग मोड तर्क ले जा सकते हैं कि कैसे है कि पिछले दशमलव स्थान नियंत्रित किया जाता है को नियंत्रित करने के कुछ स्थितियों में। हाइलाइट करना चाहते हैं, जावा आपको इस राउंडिंग विधि को निर्दिष्ट करने के लिए मजबूर करता है)।

26

हजार विभाजक सेट करने के लिए कहते हैं कि 123,456.78 आप DecimalFormat उपयोग करने के लिए है,:,

123,456.75 
123,456.00 
123,456,123,456.78 

हालांकि मैं #,###.00 मुखौटा सेट इसे सफलतापूर्वक अब मान भी स्वरूप:

 DecimalFormat df = new DecimalFormat("#,###.00"); 
    System.out.println(df.format(new BigDecimal(123456.75))); 
    System.out.println(df.format(new BigDecimal(123456.00))); 
    System.out.println(df.format(new BigDecimal(123456123456.78))); 

यहाँ परिणाम है। ध्यान दें कि परिणाम में अल्पविराम (,) विभाजक आपके लोकेल पर निर्भर करता है। यह रूसी लोकेल के लिए सिर्फ जगह() हो सकती है।

+11

आप पसंद करते हैं शून्य 0.00 (बजाय .00) के रूप में प्रदर्शित करने के लिए हैं, तो पैटर्न का उपयोग '" # , ## 0.00 "इसके बजाए। – Jonik

1
BigDecimal(19.0001).setScale(2, BigDecimal.RoundingMode.DOWN) 
+0

BigDecimal (1 9 .001) होना चाहिए .setScale (2, BigDecimal.ROUND_HALF_UP) .toString() –

3
BigDecimal pi = new BigDecimal(3.14); 
BigDecimal pi4 = new BigDecimal(12.56); 

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

// प्रिंट 3,14

System.out.printf("%.0f",pi4); 

// प्रिंट 13

संबंधित मुद्दे