我有一些数字值的字符串。
我想它在数百个用逗号分隔并且这个数字面前有$美元符号的方式进行格式化。
例如,12345应被格式化为$ 12,345.00
我想下面的代码,而美元符号:
new java.text.DecimalFormat(#,##0.00).format.(myString)
而下面的一个美元符号:
new java.text.DecimalFormat($ #,##0.00).format.(myString)
然而,无论是给错误。
什么是实现这一格式的正确方法?
这是碧玉报告JRXML的一部分,我想避免“空”的报告,从而将下面的代码:
<textField isBlankWhenNull="false" isStretchWithOverflow="true">
<reportElement stretchType="RelativeToTallestObject" x="1350" y="0" width="150" height="30"/>
<textElement/>
<textFieldExpression class="java.math.BigDecimal"><![CDATA[$F{myString}!=null?new java.text.DecimalFormat(#,##0.00).format.($F{myString}):"Unavailable"]]></textFieldExpression>
</textField>
当MyString中从查询结果和JRXML的声明:
<field name="myString" class="java.lang.String"/>
此前的myString被宣布为BigDecimal的,但随后的比较操作?=没有工作。
如果货币的价值是不可用的,我想在报告上打印的,而不是默认的“空”,“不可用”。 否则,我要如上所述正确格式化的数字。
如何解决这个问题?
谢谢阅读。
正确的表达是:
new java.text.DecimalFormat("$ #,##0.00").format(Double.valueOf($P{strParam}))
对于为java.lang.Integer和java.lang.String中工作示例:
<?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="format_as_current" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<parameter name="intParam" class="java.lang.Integer">
<defaultValueExpression><![CDATA[12345678]]></defaultValueExpression>
</parameter>
<parameter name="strParam" class="java.lang.String">
<defaultValueExpression><![CDATA["12345678.95"]]></defaultValueExpression>
</parameter>
<title>
<band height="79" splitType="Stretch">
<textField>
<reportElement x="137" y="18" width="291" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[new java.text.DecimalFormat("$ #,##0.00").format($P{intParam})]]></textFieldExpression>
</textField>
<textField>
<reportElement x="137" y="48" width="291" height="20"/>
<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>
</title>
</jasperReport>
其结果将是(在iReport的预览):
注意:您还应该为空补充检查。
您还可以使用文本框的样式属性格式化数据。
例子:
<?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="format_as_current" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<parameter name="intParam" class="java.lang.Integer">
<defaultValueExpression><![CDATA[12345678]]></defaultValueExpression>
</parameter>
<parameter name="strParam" class="java.lang.String">
<defaultValueExpression><![CDATA["12345678.95"]]></defaultValueExpression>
</parameter>
<title>
<band height="148" splitType="Stretch">
<textField pattern="$ #,##0.00">
<reportElement x="218" y="99" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$P{intParam}]]></textFieldExpression>
</textField>
<textField pattern="$ #,##0.00">
<reportElement x="218" y="119" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$P{strParam} != null && $P{strParam}.length() > 0 ? Double.valueOf($P{strParam}) : 0]]></textFieldExpression>
</textField>
</band>
</title>
</jasperReport>
其结果将是相同的。
上面的代码可以三种情况下工作:
- 固定小数点后两个零。 当我试图用“双”的数据类型为达到此目的,并没有为我工作。 但是这个代码可以做到这一点。
- 字符串数据类型的号码前修复$ - 标号,也需要照顾“ - ”号在它自己的。
- 获取“”之后的数3个位数
对我来说,我希望把每三位后“”逗号(通过传递字符串作为参数)和我尝试下面的代码。 它为我做的工作....非常感谢你。 我很欣赏这个答案。
<textFieldExpression>
<![CDATA[new java.text.DecimalFormat("$ #,##0.00").format(Double.valueOf($P{actualWrittenPremium} != null && $P{actualWrittenPremium}.length() > 0 ? Double.valueOf($P{actualWrittenPremium}) : 0))]]>
</textFieldExpression>
刚刚翻过这一问题,并发现这是工作的罚款,我的解决方案。
注意 - 它不正是作者日期是要求,但如果你谷歌这个问题,你将在这里结束了。
我有德语和英语语言环境,并在所有货币服务器应该像7.500,60
我最后的表达式:
new java.text.DecimalFormat("#,##0.00", new java.text.DecimalFormatSymbols(java.util.Locale.GERMANY)).format($F{variable}) + " €"
所以区域设置为“硬编码” - 正是我需要的。
也许这将帮助别人
使用im iReport的5.6.0和我花了一些这些问题的答案,但什么它的工作对我来说是:
文本字段(我把这个变成设计师):
Float.valueOf($V{DISPONIBLE_FINAL})
而在模式(进入属性选项卡),我用自定义格式有:
$#,##0.00
投入整个“编辑表达式”字段didnt工作,我这里提到的所有字符串。
希望能帮助到你。
PD:我使用Groovy罐子是在mvnrepository现场检查碧玉5.6.0兼容。
当试图在iReport的建议的答复,我得到了“美元符号后非法串身体角色;” 当我跑的报告。
通过像这样一个反斜杠美元符号容易补救:
new java.text.DecimalFormat("\$ #,##0.00").format(Double.valueOf($F{le1_feeAmount}))
你可以这样做也使用iReport的工作室。 在工作室点击场,看到pane.In性能属性下的文本字段属性窗格,你会发现Pattern属性。 粘贴#,## 0.00或点击三个点,蜱在弹出菜单中的复选框,在1000分离。