numberformat number moneda jasperreport jasper formato ejemplo java string formatting jasper-reports

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



jasperreport bigdecimal format (5)

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:

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

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

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

Anteriormente myString se declaró como BigDecimal, pero entonces 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 :

<?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>

El resultado será (vista previa 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:

<?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>

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

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


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 de cuerpo de cuerda ilegal 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}))


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