在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.Integer和java.lang.String的工作示例:
0 ? Double.valueOf($P{strParam}) : 0))]]>
结果将是(在iReport中预览):
注意:您还应该添加check for null。
您还可以使用textField的 pattern属性来格式化数据。
例子:
0 ? Double.valueOf($P{strParam}) : 0]]>
结果将是相同的。
上面的代码可以适用于三种情况:
- 小数点后固定两个零。 当我为此目的尝试使用“Double”数据类型时,它对我不起作用。 但是这段代码可以做到。
- 在字符串数据类型中的数字之前修复$ -sign,并且还自己处理“ – ”符号。
- 在数字中的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。