formatear una cadena a un formato de moneda en el informe de jaspe

Tengo una cadena con algún valor numérico.

Quiero formatearlo de manera que cientos estén separados por comas y el número tenga un signo de $ dólar antes.

por ejemplo, 12345 debe formatearse a $ 12,345.00

Probé el siguiente código sin signo de dólar:

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

y el de abajo con el signo de dólar:

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

Sin embargo, ambos están dando error.

¿Cuál es la forma correcta de lograr este formato?

Esta es una parte del informe de jasper jrxml donde quiero evitar el “nulo” en el informe y, por lo tanto, insertar el siguiente código:

      

Donde myString resulta de una consulta y se declara en jrxml como:

   

Anteriormente myString se declaró como BigDecimal, pero el operador de comparación? = No funcionaba.

Si el valor de la moneda no está disponible, quiero imprimir “no disponible” en el informe en lugar de “nulo” por defecto. De lo contrario, quiero que el número tenga el formato correcto como se describe arriba.

Cómo resolver este problema?

Gracias por leer.

La expresión correcta es:

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

La muestra de trabajo para java.lang.Integer y java.lang.String :

          <band height="79" splitType="Stretch"> <textfield> <reportelement x="137" y="18" width="291" height="20"></reportelement> <textelement></textelement> <textfieldexpression><![CDATA[new java.text.DecimalFormat("$ #,##0.00").format($P{intParam})]]></textfieldexpression> </textfield> <textfield> <reportelement x="137" y="48" width="291" height="20"></reportelement> <textelement></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>   

El resultado será (vista previa en iReport ):

El resultado en * iReport *

Nota: También debe agregar verificación para nulo.

También puede usar la propiedad de patrón de textField para formatear datos.

La muestra:

          <band height="148" splitType="Stretch"> <textfield pattern="$ #,##0.00"> <reportelement x="218" y="99" width="100" height="20"></reportelement> <textelement></textelement> <textfieldexpression><![CDATA[$P{intParam}]]></textfieldexpression> </textfield> <textfield pattern="$ #,##0.00"> <reportelement x="218" y="119" width="100" height="20"></reportelement> <textelement></textelement> <textfieldexpression><![CDATA[$P{strParam} != null && $P{strParam}.length() > 0 ? Double.valueOf($P{strParam}) : 0]]></textfieldexpression> </textfield> </band>   

El resultado será el mismo.

El código anterior puede funcionar para tres casos:

  1. arregla dos ceros después del punto decimal. Cuando traté de usar el tipo de datos “Doble” para este propósito, no funcionó para mí. Pero este código puede hacerlo.
  2. Arregle $ -sign antes del número en el tipo de datos de cadena y también se encarga de “-” firmar por sí mismo.
  3. Obtenga “,” después de 3 dígitos en un número

Para mí, quería poner “,” coma después de cada tres dígitos (pasando cadena como parámetro) y probé el siguiente código. Sí funcionó para mí … Muchas gracias. Agradezco esta respuesta

   0 ? Double.valueOf($P{actualWrittenPremium}) : 0))]]>  

Acabo de encontrar este problema y encontré una solución que funciona bien para mí.

Tenga cuidado: no es exactamente lo que pide el Autor, pero si busca en Google este problema, terminará aquí.

Tengo servidores con 7.500,60 regional alemana e inglesa y en toda la moneda debe ser como 7.500,60

Mi expresión final:

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

por lo que la configuración de configuración regional está “codificada”, exactamente lo que necesitaba.

Tal vez esto ayude a alguien

Estoy usando iReport 5.6.0 y tomé algunas de estas respuestas pero lo que funcionó para mí fue:

Campo de texto (puse esto en el diseñador):

 Float.valueOf($V{DISPONIBLE_FINAL}) 

Y en el patrón (en la pestaña de propiedades), utilicé el formato personalizado con:

 $#,##0.00 

Poner toda la cadena mencionada aquí en un campo completo de “Editar expresión” no funcionó para mí.

Espero eso ayude.

PD: Estaba usando el tarro groovy que es compatible con el jaspe 5.6.0 verificado en el sitio mvnrepository.

Al intentar la respuesta recomendada en iReport, obtuve “carácter ilegal de cuerpo de cuerdas después del signo de dólar”; cuando ejecuté el informe.

Remedio fácil escapando del signo de dólar con una barra invertida como esta:

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

También puedes hacer esto usando iReport Studio. En el estudio, haga clic en el campo y vea el panel de propiedades. En el panel de propiedades, en Propiedades del campo de texto , encontrará la propiedad Patrón . Pegue #, ## 0.00 o haga clic en los tres puntos y marque la checkbox en el menú emergente para separar en 1000.