在jasper报告中将字符串格式化为货币格式

我有一个带有一些数值的字符串。

我希望以数百个以逗号分隔的方式格式化它,并且数字前面有$美元符号。

例如,12345应格式化为$ 12,345.00

我尝试了下面没有美元符号的代码:

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

以及带有美元符号的下面一个:

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

但是,两者都给出了错误。

实现这种格式的正确方法是什么?

这是jasper报告jrxml的一部分,我希望在报告中避免“null”,从而插入以下代码:

      

myString来自查询,并在jrxml中声明为:

   

之前myString被声明为BigDecimal,但是后来比较运算符?=无效。

如果货币值不可用,我想在报表上打印“不可用”而不是默认的“null”。 否则,我希望如上所述正确格式化数字。

如何解决这个问题?

谢谢阅读。

正确的表达方式是:

 new java.text.DecimalFormat("$ #,##0.00").format(Double.valueOf($P{strParam})) 

java.lang.Integerjava.lang.String的工作示例:

          <band height="79" splitType="Stretch"> <textfield> <reportelement x="137" y="18" width="291" height="20"></reportelement> <textelement></textelement> <textfieldexpression><![CDATA[new java.text.DecimalFormat("$ #,##0.00").format($P{intParam})]]></textfieldexpression> </textfield> <textfield> <reportelement x="137" y="48" width="291" height="20"></reportelement> <textelement></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>   

结果将是(在iReport中预览):

* iReport *的结果

注意:您还应该添加check for null。

您还可以使用textField的 pattern属性来格式化数据。

例子:

          <band height="148" splitType="Stretch"> <textfield pattern="$ #,##0.00"> <reportelement x="218" y="99" width="100" height="20"></reportelement> <textelement></textelement> <textfieldexpression><![CDATA[$P{intParam}]]></textfieldexpression> </textfield> <textfield pattern="$ #,##0.00"> <reportelement x="218" y="119" width="100" height="20"></reportelement> <textelement></textelement> <textfieldexpression><![CDATA[$P{strParam} != null && $P{strParam}.length() > 0 ? Double.valueOf($P{strParam}) : 0]]></textfieldexpression> </textfield> </band>   

结果将是相同的。

上面的代码可以适用于三种情况:

  1. 小数点后固定两个零。 当我为此目的尝试使用“Double”数据类型时,它对我不起作用。 但是这段代码可以做到。
  2. 在字符串数据类型中的数字之前修复$ -sign,并且还自己处理“ – ”符号。
  3. 在数字中的3位数后得到“,”

对我来说,我想在每三个数字之后加上“,”逗号(通过传递字符串作为参数),我尝试了以下代码。 它对我有用….非常感谢你。 我很欣赏这个答案。

   0 ? Double.valueOf($P{actualWrittenPremium}) : 0))]]>  

刚刚遇到这个问题并找到了一个适合我的解决方案。

要注意 – 它不是Autor所要求的,但如果你谷歌这个问题,你将最终到这里。

我有德语和英语语言环境的服务器,所有货币应该是7.500,60

我的最后一句话:

 new java.text.DecimalFormat("#,##0.00", new java.text.DecimalFormatSymbols(java.util.Locale.GERMANY)).format($F{variable}) + " €" 

所以Locale设置是“硬编码” – 正是我需要的。

也许这会对某人有所帮助

我使用iReport 5.6.0,我采取了一些这些答案,但它对我有用的是:

文字字段(我把它放到设计师中):

 Float.valueOf($V{DISPONIBLE_FINAL}) 

在Pattern(进入属性选项卡)中,我使用自定义格式:

 $#,##0.00 

将这里提到的所有字符串放在一个完整的“编辑表达式”字段中对我来说没有用。

希望能帮助到你。

PD:我使用的groovy jar与mvnrepository站点中检查的jasper 5.6.0兼容。

在iReport中尝试推荐的答案时,我得到了“美元符号后的非法字体符号”; 当我运行报告时。

通过反斜杠逃避美元符号轻松补救:

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

您也可以使用iReport Studio执行此操作。 在工作室中单击该字段并查看属性窗格。在“ 文本字段属性”下的属性窗格中,您将找到“ 模式”属性。 粘贴#,## 0.00或单击三个点并勾选弹出菜单中的复选框以分隔为1000。