फ़ॉर्मेट किए गए BigDecimal मान कैसे प्रिंट करें?


104

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

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

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

जवाबों:


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

यह Localeआपके मुद्रा प्रतीक को चुनने के लिए आपके जेवीएम के वर्तमान डिफ़ॉल्ट का उपयोग करेगा । या आप एक निर्दिष्ट कर सकते हैं Locale

NumberFormat.getInstance(Locale.US)

अधिक जानकारी के लिए, NumberFormatवर्ग देखें ।


क्या DecimalFormat की तरह एक पैटर्न निर्दिष्ट करना संभव है?
फिलिप गियोसेफ़ी

71

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

     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)));

यहाँ परिणाम है:

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

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


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

35

एक और तरीका है जो दी गई स्थिति के लिए समझ में आ सकता है

BigDecimal newBD = oldBD.setScale(2);

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

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

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


14
 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


6

@Jeff_Alieffson द्वारा उत्तर के समान, लेकिन डिफ़ॉल्ट पर निर्भर नहीं Locale:

DecimalFormatSymbolsस्पष्ट स्थान के लिए उपयोग करें :

DecimalFormatSymbols decimalFormatSymbols  = DecimalFormatSymbols.getInstance(new Locale("ru", "RU"));

या स्पष्ट विभाजक प्रतीक:

DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator('.');
decimalFormatSymbols.setGroupingSeparator(' ');

फिर:

new DecimalFormat("#,##0.00", decimalFormatSymbols).format(new BigDecimal("12345"));

परिणाम:

12 345.00

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