Java 使用Jasper将Double格式设置为coma后带有两个数字的字符串
我有一个jrxml文件,其中有两个双精度值,希望格式化为coma后面有两个数字的字符串,所以这里是我的字段Java 使用Jasper将Double格式设置为coma后带有两个数字的字符串,java,jasper-reports,Java,Jasper Reports,我有一个jrxml文件,其中有两个双精度值,希望格式化为coma后面有两个数字的字符串,所以这里是我的字段 <field name="montantRachat" class="java.lang.Double"> <fieldDescription><![CDATA[montantRachat]]></fieldDescription> </field> <variable name="total" class=
<field name="montantRachat" class="java.lang.Double">
<fieldDescription><![CDATA[montantRachat]]></fieldDescription>
</field>
<variable name="total" class="java.lang.Double" calculation="Sum">
<variableExpression><![CDATA[$F{montantRachat}]]></variableExpression>
<initialValueExpression><![CDATA[new Double(0)]]></initialValueExpression>
</variable>
我遗漏了什么吗?这里有一个更简单的方法。您可以创建一个
文本字段
,并将其模式设置为,###0.00#
,而不是创建另一个类型为字符串
的变量
您是否尝试将报表的语言设置为java?这里还有另一个解决方案,适用于那些仍然想使用DecimalFormat新DecimalFormat(“#,#,#,#0.00”).format($V{total}.doubleValue()).toString()
<variable name="totalString" class="java.lang.String">
<variableExpression><![CDATA[(new DecimalFormat("#,###,##0.00")).format($V{total})]]></variableExpression>
</variable>
<variable name="montantRachatString" class="java.lang.String">
<variableExpression><![CDATA[(new DecimalFormat("#,###,##0.00")).format($F{montantRachat})]]></variableExpression>
</variable>
net.sf.jasperreports.engine.JRException: net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression :
Source text : (new DecimalFormat("#,###,##0.00")).format($V{total})
at com.jaspersoft.studio.editor.preview.view.control.ReportControler.fillReport(ReportControler.java:466)
at com.jaspersoft.studio.editor.preview.view.control.ReportControler.access$18(ReportControler.java:441)
at com.jaspersoft.studio.editor.preview.view.control.ReportControler$4.run(ReportControler.java:333)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
Caused by: net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression :
Source text : (new DecimalFormat("#,###,##0.00")).format($V{total})
at net.sf.jasperreports.engine.fill.JREvaluator.evaluateEstimated(JREvaluator.java:327)
at net.sf.jasperreports.engine.fill.JRCalculator.evaluateEstimated(JRCalculator.java:602)
at net.sf.jasperreports.engine.fill.JRCalculator.estimateVariables(JRCalculator.java:201)
at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1261)
at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1235)
at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1614)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:150)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:963)
at net.sf.jasperreports.engine.fill.BaseFillHandle$ReportFiller.run(BaseFillHandle.java:120)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoCachedMethodSite.invoke(PojoMetaMethodSite.java:189)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:53)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
at ORV45rapport45pdf_subreport_1490866646896_381083.evaluateEstimated(calculator_ORV45rapport45pdf_subreport_1490866646896_381083:355)
at net.sf.jasperreports.engine.fill.JREvaluator.evaluateEstimated(JREvaluator.java:314)
... 9 more
<textField pattern="#,##0.00#">
<reportElement x="455" y="0" width="100" height="30"/>
<textFieldExpression><![CDATA[$V{total}]]></textFieldExpression>
</textField>