Vic*_*cky 16 java string formatting jasper-reports
我有一个带有一些数值的字符串.
我希望以数百个以逗号分隔的方式格式化它,并且数字前面有$美元符号.
例如,12345应格式化为$ 12,345.00
我尝试了下面没有美元符号的代码:
new java.text.DecimalFormat(#,##0.00).format.(myString)
Run Code Online (Sandbox Code Playgroud)
以及带有美元符号的下面一个:
new java.text.DecimalFormat($ #,##0.00).format.(myString)
Run Code Online (Sandbox Code Playgroud)
但是,两者都给出了错误.
实现这种格式的正确方法是什么?
这是jasper报告jrxml的一部分,我希望在报告中避免"null",从而插入以下代码:
<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>
Run Code Online (Sandbox Code Playgroud)
其中myString来自查询,并在jrxml中声明为:
<field name="myString" class="java.lang.String"/>
Run Code Online (Sandbox Code Playgroud)
之前myString被声明为BigDecimal,但后来比较运算符?=不起作用.
如果货币值不可用,我想在报告上打印"不可用"而不是默认的"空".否则,我希望如上所述正确格式化数字.
如何解决这个问题?
谢谢阅读.
Ale*_*x K 37
正确的表达方式是:
new java.text.DecimalFormat("$ #,##0.00").format(Double.valueOf($P{strParam}))
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
结果将是(在iReport中预览):

注意: 您还应该添加check for null.
您还可以使用textField的pattern属性来格式化数据.
例子:
<?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>
Run Code Online (Sandbox Code Playgroud)
结果将是相同的.
| 归档时间: |
|
| 查看次数: |
76027 次 |
| 最近记录: |