无法在 Jasper Reports 中格式化数字
Unable to format number in Jasper Reports
我正在使用 iReport 3.7.6 设计一个 PDF 报告,使用 XML 数据源,其中包含一些价格(货币价值),在我的报告中引入了 textField
,所以我使用pattern
textField
属性 来设置货币格式,但不幸的是它没有按照我想要的格式设置它。
在这里你可以看到我想在 XML 文件中格式化为货币的值:
<importFormalitzat>1500.0</importFormalitzat>
这是 textField
的 JRXML 代码,我在其中显示值:
<textField pattern="¤ #,##0.00" isBlankWhenNull="true">
<reportElement x="4" y="475" width="181" height="13"/>
<textElement lineSpacing="Single">
<font size="8"/>
</textElement>
<textFieldExpression class="java.lang.Double"><![CDATA[$F{importFormalitzat} ]]></textFieldExpression>
</textField>
如您所见,我用来格式化值的模式是:pattern="¤ #,##0.00"
但是我预览报告时得到的结果是这样的:15000,00
我不明白为什么我得到 15000,00 而我在 XML 文件中填写报告的值是 1500.0。
我尝试将 TextField 表达式中的 Java class 更改为 Integer
、BigDecimal
,但我仍然没有在报告中得到正确的值!
当您加载 xml 文件时,这是 Locale 和数字模式的问题,因此对于您的 "Spanish" 语言环境,小数点分隔符是 , 不是 .
您需要为 xml 数据源设置正确的区域设置和数字模式:
在java
JRXmlDataSource ds = new JRXmlDataSource("theXmlFile");
ds.setLocale(Locale.US); //Example US that uses . as decimal separator
ds.setNumberPattern("###0.00;-###0.00");//Pattern of number in xml file
在iReport中(数据源的定义)
编辑: 添加 运行 示例及其输出
XML 文件
<report>
<persons>
<person>
<name>John</name>
<value>1500.0</value>
</person>
<person>
<name>Marko</name>
<value>1700.0</value>
</person>
</persons>
</report>
JRXML文件
<?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="TableWithList" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="2347c131-1884-430a-b77f-59f08f896c8a">
<queryString language="xPath">
<![CDATA[/report/persons/person]]>
</queryString>
<field name="value" class="java.lang.Double">
<fieldDescription><![CDATA[value]]></fieldDescription>
</field>
<field name="name" class="java.lang.String">
<fieldDescription><![CDATA[name]]></fieldDescription>
</field>
<columnHeader>
<band height="20">
<staticText>
<reportElement x="0" y="0" width="100" height="20" uuid="a131c9e4-a295-460f-8d9a-d7a85f0de41a"/>
<textElement verticalAlignment="Middle">
<font isBold="true"/>
</textElement>
<text><![CDATA[name]]></text>
</staticText>
<staticText>
<reportElement x="100" y="0" width="100" height="20" uuid="e39eb5aa-0687-48e8-a268-193993d647e1"/>
<textElement verticalAlignment="Middle">
<font isBold="true"/>
</textElement>
<text><![CDATA[value]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="20" splitType="Stretch">
<textField pattern="¤ #,##0.00">
<reportElement x="100" y="0" width="100" height="20" uuid="7c293632-3735-497e-8315-72ade69125e9"/>
<textElement verticalAlignment="Middle"/>
<textFieldExpression class="java.lang.Double"><![CDATA[$F{value}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="0" y="0" width="100" height="20" uuid="83e733ca-8ad8-462c-b1b0-85b3c8b3e6f1"/>
<textElement verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
注意:value
class="java.lang.Double"
的字段定义
输出
我正在使用 iReport 3.7.6 设计一个 PDF 报告,使用 XML 数据源,其中包含一些价格(货币价值),在我的报告中引入了 textField
,所以我使用pattern
textField
属性 来设置货币格式,但不幸的是它没有按照我想要的格式设置它。
在这里你可以看到我想在 XML 文件中格式化为货币的值:
<importFormalitzat>1500.0</importFormalitzat>
这是 textField
的 JRXML 代码,我在其中显示值:
<textField pattern="¤ #,##0.00" isBlankWhenNull="true">
<reportElement x="4" y="475" width="181" height="13"/>
<textElement lineSpacing="Single">
<font size="8"/>
</textElement>
<textFieldExpression class="java.lang.Double"><![CDATA[$F{importFormalitzat} ]]></textFieldExpression>
</textField>
如您所见,我用来格式化值的模式是:pattern="¤ #,##0.00"
但是我预览报告时得到的结果是这样的:15000,00
我不明白为什么我得到 15000,00 而我在 XML 文件中填写报告的值是 1500.0。
我尝试将 TextField 表达式中的 Java class 更改为 Integer
、BigDecimal
,但我仍然没有在报告中得到正确的值!
当您加载 xml 文件时,这是 Locale 和数字模式的问题,因此对于您的 "Spanish" 语言环境,小数点分隔符是 , 不是 .
您需要为 xml 数据源设置正确的区域设置和数字模式:
在java
JRXmlDataSource ds = new JRXmlDataSource("theXmlFile");
ds.setLocale(Locale.US); //Example US that uses . as decimal separator
ds.setNumberPattern("###0.00;-###0.00");//Pattern of number in xml file
在iReport中(数据源的定义)
编辑: 添加 运行 示例及其输出
XML 文件
<report>
<persons>
<person>
<name>John</name>
<value>1500.0</value>
</person>
<person>
<name>Marko</name>
<value>1700.0</value>
</person>
</persons>
</report>
JRXML文件
<?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="TableWithList" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="2347c131-1884-430a-b77f-59f08f896c8a">
<queryString language="xPath">
<![CDATA[/report/persons/person]]>
</queryString>
<field name="value" class="java.lang.Double">
<fieldDescription><![CDATA[value]]></fieldDescription>
</field>
<field name="name" class="java.lang.String">
<fieldDescription><![CDATA[name]]></fieldDescription>
</field>
<columnHeader>
<band height="20">
<staticText>
<reportElement x="0" y="0" width="100" height="20" uuid="a131c9e4-a295-460f-8d9a-d7a85f0de41a"/>
<textElement verticalAlignment="Middle">
<font isBold="true"/>
</textElement>
<text><![CDATA[name]]></text>
</staticText>
<staticText>
<reportElement x="100" y="0" width="100" height="20" uuid="e39eb5aa-0687-48e8-a268-193993d647e1"/>
<textElement verticalAlignment="Middle">
<font isBold="true"/>
</textElement>
<text><![CDATA[value]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="20" splitType="Stretch">
<textField pattern="¤ #,##0.00">
<reportElement x="100" y="0" width="100" height="20" uuid="7c293632-3735-497e-8315-72ade69125e9"/>
<textElement verticalAlignment="Middle"/>
<textFieldExpression class="java.lang.Double"><![CDATA[$F{value}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="0" y="0" width="100" height="20" uuid="83e733ca-8ad8-462c-b1b0-85b3c8b3e6f1"/>
<textElement verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
注意:value
class="java.lang.Double"
输出