我在iReport中有这个表达式。:
($F{Q3_February}==0)?"-":$F{Q3_February}
表达式类为Double
,如果$F{Q3_February}
的值为0
,我希望此返回为“ - ”。
只有当我将其更改为Expression class String
时才会出现“ - ”但问题是如果值为false,则不会返回值#,##0.00 %
答案 0 :(得分:2)
您的问题是,如果表达式类不是数字,则不应用textField模式。您试图有条件地改变价值,但也改变班级。单个textField无法实现这一点。
我认为你最好将它分成两个textFields,一个字符串和一个double。将它们放在彼此之上,然后使用printWhenExpression
来隐藏不需要的那个。最终结果类似于具有条件表达式的单个字段,但是使用其他元素属性(即类和模式)可以更灵活。
示例:
<textField pattern="#,##0.00 %">
<reportElement x="200" y="80" width="100" height="20">
<printWhenExpression>
<![CDATA[$F{Q3_February}!=0]]>
</printWhenExpression>
</reportElement>
<textFieldExpression class="java.lang.Double">
<![CDATA[$F{Q3_February}]]>
</textFieldExpression>
</textField>
<textField>
<reportElement x="200" y="80" width="100" height="20">
<printWhenExpression>
<![CDATA[$F{Q3_February}==0]]>
</printWhenExpression>
</reportElement>
<textFieldExpression class="java.lang.String">
<![CDATA["-"]]>
</textFieldExpression>
</textField>
答案 1 :(得分:0)
有一些替代方法[对GenericJon的建议来解决这个问题]:
[Define Scriptlet name="bob"] <textFieldExpression class="java.lang.String"> <!CDATA[$P{[bob]_SCRIPTLET}.formatValues(fields1:n..)]]></textFieldExpression>