2012-06-06 21 views
13

में एक मुद्रा प्रारूप में स्ट्रिंग को स्वरूपित करना मेरे पास कुछ संख्यात्मक मान के साथ एक स्ट्रिंग है।जैस्पर रिपोर्ट

मैं इसे इस तरह प्रारूपित करना चाहता हूं जहां सैकड़ों अल्पविराम से अलग हो और संख्या से पहले $ डॉलर का संकेत हो।

उदा। 12345 $ 12,345.00

के प्रारूप में होना चाहिए मैं डॉलर चिह्न के बिना नीचे कोड की कोशिश की:

new java.text.DecimalFormat(#,##0.00).format.(myString) 

और डॉलर चिह्न के साथ एक नीचे:

new java.text.DecimalFormat($ #,##0.00).format.(myString) 

हालांकि, दोनों त्रुटि दे रहे हैं।

इस प्रारूप को प्राप्त करने का सही तरीका क्या है?

इस Jasper रिपोर्ट jrxml का एक हिस्सा है, जहां मैं रिपोर्ट पर "अशक्त" से बचना चाहते हैं और इस तरह नीचे कोड डालने है:

<textField isBlankWhenNull="false" isStretchWithOverflow="true">    
    <reportElement stretchType="RelativeToTallestObject" x="1350" y="0" width="150" height="30"/>    
     <textElement/>    
    <textFieldExpression class="java.math.BigDecimal"><![CDATA[$F{myString}!=null?new java.text.DecimalFormat(#,##0.00).format.($F{myString}):"Unavailable"]]></textFieldExpression>   
</textField> 

कहाँ एक प्रश्न से myString परिणाम और jrxml में घोषित किया जाता है:

<field name="myString" class="java.lang.String"/> 

इससे पहले myString BigDecimal के रूप में घोषित किया गया था, लेकिन तब तुलना ऑपरेटर? = काम नहीं कर रहा था।

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

इस समस्या को हल करने के लिए कैसे करें?

पढ़ने के लिए धन्यवाद।

उत्तर

27

सही अभिव्यक्ति है:

new java.text.DecimalFormat("$ #,##0.00").format(Double.valueOf($P{strParam})) 

के लिए java.lang.Integer और java.lang.String काम कर नमूना:

<?xml version="1.0" encoding="UTF-8"?> 
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="format_as_current" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20"> 
    <parameter name="intParam" class="java.lang.Integer"> 
     <defaultValueExpression><![CDATA[12345678]]></defaultValueExpression> 
    </parameter> 
    <parameter name="strParam" class="java.lang.String"> 
     <defaultValueExpression><![CDATA["12345678.95"]]></defaultValueExpression> 
    </parameter> 
    <title> 
     <band height="79" splitType="Stretch"> 
      <textField> 
       <reportElement x="137" y="18" width="291" height="20"/> 
       <textElement/> 
       <textFieldExpression><![CDATA[new java.text.DecimalFormat("$ #,##0.00").format($P{intParam})]]></textFieldExpression> 
      </textField> 
      <textField> 
       <reportElement x="137" y="48" width="291" height="20"/> 
       <textElement/> 
       <textFieldExpression><![CDATA[new java.text.DecimalFormat("$ #,##0.00").format(Double.valueOf($P{strParam} != null && $P{strParam}.length() > 0 ? Double.valueOf($P{strParam}) : 0))]]></textFieldExpression> 
      </textField> 
     </band> 
    </title> 
</jasperReport> 

परिणाम होगा हो (में पूर्वावलोकन iReport):

The result in *iReport*

नोट: तुम भी अशक्त के लिए चेक जोड़ना चाहिए।

तुम भी पैटर्न स्वरूपण डेटा के लिए की संपत्ति textfield उपयोग कर सकते हैं।

नमूना:

<?xml version="1.0" encoding="UTF-8"?> 
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="format_as_current" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20"> 
    <parameter name="intParam" class="java.lang.Integer"> 
     <defaultValueExpression><![CDATA[12345678]]></defaultValueExpression> 
    </parameter> 
    <parameter name="strParam" class="java.lang.String"> 
     <defaultValueExpression><![CDATA["12345678.95"]]></defaultValueExpression> 
    </parameter> 
    <title> 
     <band height="148" splitType="Stretch"> 
      <textField pattern="$ #,##0.00"> 
       <reportElement x="218" y="99" width="100" height="20"/> 
       <textElement/> 
       <textFieldExpression><![CDATA[$P{intParam}]]></textFieldExpression> 
      </textField> 
      <textField pattern="$ #,##0.00"> 
       <reportElement x="218" y="119" width="100" height="20"/> 
       <textElement/> 
       <textFieldExpression><![CDATA[$P{strParam} != null && $P{strParam}.length() > 0 ? Double.valueOf($P{strParam}) : 0]]></textFieldExpression> 
      </textField> 
     </band> 
    </title> 
</jasperReport> 

परिणाम वही होगा।

+0

एक और समाधान –

+0

धन्यवाद एलेक्स जोड़ने के लिए, इसे बाहर की कोशिश करेंगे! – Nik

+0

Double.valueOf त्रुटि दे रहा है " अपेक्षित" ...मैंने यह पाया - "यदि आप जैस्पर रिपोर्ट के बाहर पुस्तकालयों का उपयोग करते हैं तो आपको संकलन वर्ग पथ निर्दिष्ट करने की आवश्यकता है" --- लेकिन यह नहीं पता कि इसे कैसे प्राप्त किया जाए! – Nik

3

ऊपर कोड तीन मामलों के लिए काम कर सकते हैं:

  1. ठीक दशमलव बिंदु के बाद दो शून्य। जब मैंने इस उद्देश्य के लिए "डबल" डेटाटाइप का उपयोग करने की कोशिश की तो यह मेरे लिए काम नहीं करता था। लेकिन यह कोड यह कर सकता है।
  2. स्ट्रिंग डेटाटाइप में संख्या से पहले $ -sign को ठीक करें और अपने आप में "-" साइन का ख्याल रखता है। एक नंबर

में

  • प्राप्त करें "," 3 अंक के बाद मेरे लिए मैं (एक पैरामीटर के रूप स्ट्रिंग पारित करके) डाल करने के लिए "," हर तीन अंकों के बाद अल्पविराम चाहता था और मैं निम्नलिखित कोड की कोशिश की। यह मेरे लिए काम किया .... बहुत बहुत धन्यवाद। मैं इस जवाब की सराहना करता हूं।

    <textFieldExpression> 
    
    <![CDATA[new java.text.DecimalFormat("$ #,##0.00").format(Double.valueOf($P{actualWrittenPremium} != null && $P{actualWrittenPremium}.length() > 0 ? Double.valueOf($P{actualWrittenPremium}) : 0))]]> 
    
    </textFieldExpression> 
    
  • 0

    इम iReport 5.6.0 और मैं का उपयोग कर इन उत्तरों से कुछ लिया, लेकिन क्या यह मेरे लिए काम किया था:

    पाठ फ़ील्ड (मैं डिजाइनर में डाल):

    Float.valueOf($V{DISPONIBLE_FINAL}) 
    

    और पैटर्न (गुण टैब में) में, मैं कस्टम स्वरूप का इस्तेमाल किया के साथ:

    $#,##0.00 
    

    सभी स्ट्रिंग उल्लेख लाना यहां पूरी तरह से "अभिव्यक्ति संपादित करें" फ़ील्ड ने मेरे लिए काम नहीं किया है।

    आशा है कि यह मदद करता है।

    पीडी: मैं groovy जार का उपयोग कर रहा था जो mvnrepository साइट में जैस्पर 5.6.0 के साथ संगत है।

    0

    iReport में अनुशंसित उत्तर की कोशिश करते समय, मुझे "डॉलर के हस्ताक्षर के बाद अवैध स्ट्रिंग बॉडी कैरेक्टर" मिला जब मैंने रिपोर्ट चलाई।

    आसानी से तो जैसे एक बैकस्लैश के साथ डॉलर साइन भागने से उपचार:

    new java.text.DecimalFormat("\$ #,##0.00").format(Double.valueOf($F{le1_feeAmount})) 
    
    1

    बस इस समस्या करवाते आया था और एक समाधान जो मेरे लिए ठीक काम कर रहा है मिल गया।

    जागरूक रहें - यह बिल्कुल ठीक नहीं है कि ऑटोर क्या पूछ रहा है लेकिन यदि आप इस समस्या को Google करते हैं तो आप यहां समाप्त हो जाएंगे।

    मैं जर्मन और अंग्रेजी लोकेल के साथ और सभी मुद्रा पर सर्वर 7.500,60

    मेरे अंतिम अभिव्यक्ति की तरह होना चाहिए है:

    new java.text.DecimalFormat("#,##0.00", new java.text.DecimalFormatSymbols(java.util.Locale.GERMANY)).format($F{variable}) + " €" 
    

    तो स्थानीय सेटिंग "हार्डकोडेड" है - मैं वास्तव में क्या जरूरत है।

    हो सकता है कि इस में मदद मिलेगी किसी

    +0

    यदि देश में स्थानीय लोकेल परिभाषा नहीं दी गई है? वैसे भी इसे कैसे बनाया जाए? उदाहरण के लिए, इंडोनेशिया java.util.Locale के अंदर सूचीबद्ध नहीं है। @Frankstar – gumuruh

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