格式化字符串中的碧玉报告货币格式格式化字符串中的碧玉报告货币格式(formatting a stri

2019-05-17 09:20发布

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

我想它在数百个用逗号分隔并且这个数字面前有$美元符号的方式进行格式化。

例如,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的,但随后的比较操作?=没有工作。

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

如何解决这个问题?

谢谢阅读。

Answer 1:

正确的表达是:

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

对于为java.lang.Integerjava.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>

其结果将是相同的。



Answer 2:

上面的代码可以三种情况下工作:

  1. 固定小数点后两个零。 当我试图用“双”的数据类型为达到此目的,并没有为我工作。 但是这个代码可以做到这一点。
  2. 字符串数据类型的号码前修复$ - 标号,也需要照顾“ - ”号在它自己的。
  3. 获取“”之后的数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>


Answer 3:

刚刚翻过这一问题,并发现这是工作的罚款,我的解决方案。

注意 - 它不正是作者日期是要求,但如果你谷歌这个问题,你将在这里结束了。

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

我最后的表达式:

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

所以区域设置为“硬编码” - 正是我需要的。

也许这将帮助别人



Answer 4:

使用im iReport的5.6.0和我花了一些这些问题的答案,但什么它的工作对我来说是:

文本字段(我把这个变成设计师):

Float.valueOf($V{DISPONIBLE_FINAL})

而在模式(进入属性选项卡),我用自定义格式有:

$#,##0.00

投入整个“编辑表达式”字段didnt工作,我这里提到的所有字符串。

希望能帮助到你。

PD:我使用Groovy罐子是在mvnrepository现场检查碧玉5.6.0兼容。



Answer 5:

当试图在iReport的建议的答复,我得到了“美元符号后非法串身体角色;” 当我跑的报告。

通过像这样一个反斜杠美元符号容易补救:

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


Answer 6:

你可以这样做也使用iReport的工作室。 在工作室点击场,看到pane.In性能属性下的文本字段属性窗格,你会发现Pattern属性。 粘贴#,## 0.00或点击三个点,蜱在弹出菜单中的复选框,在1000分离。



文章来源: formatting a string to a currency format in jasper report