Arrotondamento dati report IReport

di il
4 risposte

Arrotondamento dati report IReport

Buongiorno a tutti, essendo un neofita del software di reportistica e di Java in generale, non riesco a venire a capo di un piccolo problema.
Sto modificando un report di Invoicex, e dopo svariati tentativi sono quasi riuscito ad ottenere il risultato che mi serve.
L'unico problema è che l'output (ovvero un numero decimale) viene stampato con un serie infinita di decimali, questo perché viene generato come stringa di testo.
Avrei la necessità di troncare la stringa dopo il secondo decimale, ma non riesco ad ottenere quanto mi serve.
Il risultato finale dipende dalla condizione iniziale, che è un confronto fra due stringhe, quindi la soluzione che avrei trovato, per evitare errori di compilazione, è quella di trasformare in stringa anche il risultato finale, ma questo mi provoca l'inconveniente di cui sopra.
Qualcuno saprebbe cortesemente indicarmi una via di uscita?
Grazie mille, allego la stringa incriminata

$F{tipo}.equals("A") ? String.valueOf ($V{totaleIvaIneducibile}.doubleValue()+$V{totaleIva1}.doubleValue()): String.valueOf ($V{totaleIva1}.doubleValue())

4 Risposte

  • Re: Arrotondamento dati report IReport

    Domanda numero 1: perchè trasformi in String ciò che è un numero?
    Domanda numero 2: perchè non lasci che venga restituito un double e, utilizzando la formattazione della casella di testo, la formatti col numero di decimali che ti serve?

    Ad esempio, se stai cercando di usare una TextField che deve visualizzare il valore di quell'espressione e vuoi che il valore venga visualizzato usando 3 cifre decimali al massimo:
    
    <textField pattern="###0.000;(###0.000-)">
       <reportElement x="..." y="..." width="..." height="..." uuid="..."/>
       <textFieldExpression>
          <![CDATA[
          $F{tipo}.equals("A") ? $V{totaleIvaIneducibile}.doubleValue()+$V{totaleIva1}.doubleValue() : $V{totaleIva1}.doubleValue()]
          ]>
       </textFieldExpression>
    </textField>
    
    Ciao.
  • Re: Arrotondamento dati report IReport

    Grazie per la risposta Lele, come detto sono completamente digiuno di programmazione Java.
    Sto tentando di modificare un report generato da Invoicex, programma di gestione aziendale, su inìdicazione del mio commercialista che vuole il report in maniera diversa da quanto esce dal software sic…
    Ho allora modificato un campo presente, e per riuscire ad avere un report funzionante, ho trasformato il tutto in stringa, non riuscendo a fare diversamente: cosa con poco senso e che mi può generare numeri in uscita con potenzialmente molti decimali, ma in formato stringa.
    Ho modificato il codice come mi hai suggerito e come posto qui sotto, ma se nelle proprietà del campo testo come "Classe di Espressione" selezione stringa mi restituisce il seguente errore "Cannot cast from double to String", mentre se lo imposto come double mi restituisce "Cannot cast from double to Double".
    Grazie mille per l'attenzione

    <textField pattern="###0.000;(###0.000-)">
    <reportElement x="265" y="89" width="122" height="20"/>
    <textElement textAlignment="Right">
    <font size="6" isBold="true" isItalic="false"/>
    </textElement>
    <textFieldExpression class="java.lang.Double"><![CDATA[$F{tipo}.equals("A") ? $V{totaleIvaIneducibile}.doubleValue()+$V{totaleIva1}.doubleValue() : $V{totaleIva1}.doubleValue()]]></textFieldExpression>
    </textField>
  • Re: Arrotondamento dati report IReport

    La classe dell'espressione va impostata a java.lang.Double

    Se non riesce a fare il cast automatico, probabilmente è perchè stai usando una versione di Java antecedente la 5.

    In questo caso, modifica l'espressione in questo modo:
    
    <![CDATA[java.lang.Double.valueOf($F{tipo}.equals("A") ? $V{totaleIvaIneducibile}.doubleValue()+$V{totaleIva1}.doubleValue() : $V{totaleIva1}.doubleValue())]]>
    
    Ciao.
  • Re: Arrotondamento dati report IReport

    Sei un grande, grazie mille, spero di aver modo di ricambiare.
    Adesso devo trovare il database e capire come il software ci mette i dti, ma quella è un'altra storia.
    Grazie mille
    Luca
Devi accedere o registrarti per scrivere nel forum
4 risposte