使用 Jasper 在逗号后将 Double 格式化为带有两个数字的字符串
Formatting a Double to a String with two numbers after the coma using Jasper
我有一个 jrxml 文件,其中有两个 Double 值,它们想在昏迷后用两个数字格式化为字符串,所以这是我的字段
<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>
我想将它们格式化为字符串
<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(ReportControler.java:441)
at com.jaspersoft.studio.editor.preview.view.control.ReportControler.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
并将其模式设置为 #,##0.00#
.
,而不是创建另一个 String
类型的 variable
来格式化和显示数字
<textField pattern="#,##0.00#">
<reportElement x="455" y="0" width="100" height="30"/>
<textFieldExpression><![CDATA[$V{total}]]></textFieldExpression>
</textField>
我有一个 jrxml 文件,其中有两个 Double 值,它们想在昏迷后用两个数字格式化为字符串,所以这是我的字段
<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>
我想将它们格式化为字符串
<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(ReportControler.java:441)
at com.jaspersoft.studio.editor.preview.view.control.ReportControler.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
并将其模式设置为 #,##0.00#
.
String
类型的 variable
来格式化和显示数字
<textField pattern="#,##0.00#">
<reportElement x="455" y="0" width="100" height="30"/>
<textFieldExpression><![CDATA[$V{total}]]></textFieldExpression>
</textField>