2012-06-06 44 views
13

Tengo una cadena con algún valor numérico.formateando una cadena a un formato de moneda en el informe de jaspe

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

p. Ej. 12345 debe ser formateado a $ 12,345.00

probé el código de abajo sin signo dólar:

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

y por debajo de uno con 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 Jasper jrxml donde yo quiero evitar "nulo" en el informe y la inserción de este modo el código de abajo:

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

Cuando los resultados mystring de una consulta y se declara en jrxml como:

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

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.

Respuesta

27

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á ser (vista previa en iReport):

The result in *iReport*

Nota: También debe agregar cheque por nulo.

También puede utilizar patrón propiedad de textField de datos de formato.

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.

+0

añadir otra solución –

+0

Gracias Alex, será probarlo! – Nik

+0

Double.valueOf está dando el error " esperado" ...Encontré esto: "necesitas especificar la ruta de la clase de compilación si usas bibliotecas externas a los informes de jaspe", ¡pero no pude averiguar cómo lograrlo! – Nik

3

El código anterior se puede trabajar durante tres casos:

  1. fijar dos ceros después de la coma 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. Fix $ -señaló antes del número en el tipo de datos de cadena y también se ocupa del signo "-" por sí mismo.
  3. Get "" después de 3 dígitos en un número

para mí que quería poner "" coma después de cada tres dígitos (pasando cadena como parámetro) y me trató 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> 
0

Im usando iReport 5.6.0 y me tomó algunas de estas respuestas, pero lo que funcionó para mí fue:

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

Float.valueOf($V{DISPONIBLE_FINAL}) 

y en el patrón (en ficha de propiedades), he utilizado con formato personalizado:

$#,##0.00 

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

Espero que ayude.

PD: Estaba usando un tarro groovy compatible con jaspe 5.6.0 registrado en el sitio mvnrepository.

0

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

soluciona fácilmente escapar el signo de dólar con una barra invertida, así:

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

Sólo encontré con este problema y encontrar una solución que está trabajando muy bien para mí.

Sea consciente - no es exactamente lo que pide el Autor, pero si busca en Google este problema, terminará aquí.

que tienen Servidores con Alemán e Inglés Idioma y en toda la moneda deben 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 regional es "codificado" - exactamente lo que necesitaba.

Tal vez esto ayude a alguien

+0

si la definición de país no se da allí? Cómo hacerlo de todos modos? Por ejemplo, Indonesia no figura en java.util.Locale. @Frankstar – gumuruh

Cuestiones relacionadas