数値を含む文字列があります。
何百ものコンマで区切られ、数字の前にドル記号が付いているようにフォーマットしたい。
例えば12345は12,345.00ドルにフォーマットする必要があります
私はドル記号なしで以下のコードを試しました:
new Java.text.DecimalFormat(#,##0.00).format.(myString)
そして、ドル記号付きの以下のもの:
new Java.text.DecimalFormat($ #,##0.00).format.(myString)
ただし、どちらもエラーを引き起こしています。
この形式を達成する正しい方法は何ですか?
これは、ジャスパーレポート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>
MyStringはクエリの結果であり、jrxmlで次のように宣言されています。
<field name="myString" class="Java.lang.String"/>
以前のmyStringはBigDecimalとして宣言されていましたが、比較演算子?=は機能していませんでした。
通貨の値が使用できない場合、デフォルトの「null」の代わりに「unavailable」をレポートに印刷したいです。それ以外の場合、上記のように番号を適切にフォーマットする必要があります。
この問題を解決するには?
読んでくれてありがとう。
正しい表現は次のとおりです。
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でプレビュー):
注: nullのチェックも追加する必要があります。
patternプロパティtextFieldデータのフォーマット用。
標本、見本:
<?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つの場合に機能します。
私にとっては、パラメータとして文字列を渡すことにより、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>
ちょうどこの問題に出くわして、私にとってうまく機能している解決策を見つけました。
気をつけてください-Autorが要求していることは正確ではありませんが、この問題をグーグルで検索すると、ここで終わることになります。
ドイツ語と英語のロケールのサーバーがあり、すべての通貨は7.500,60
私の最終的な表現:
new Java.text.DecimalFormat("#,##0.00", new Java.text.DecimalFormatSymbols(Java.util.Locale.GERMANY)).format($F{variable}) + " €"
ロケール設定は「ハードコーディング」されています-まさに必要なものです。
たぶんこれは誰かを助けるでしょう
私はiReport 5.6.0を使用しており、これらの回答のいくつかを取りましたが、それが私にとってうまくいったのは:
テキストフィールド(これをデザイナーに入力しました):
Float.valueOf($V{DISPONIBLE_FINAL})
([プロパティ]タブにある)パターンでは、カスタムフォーマットを次のように使用しました。
$#,##0.00
ここで言及したすべての文字列を「式の編集」フィールド全体に入れてもうまくいきませんでした。
それが役に立てば幸い。
PD:mvnrepositoryサイトでチェックされたジャスパー5.6.0と互換性のあるgroovy jarを使用していました。
これは、iReport Studioを使用して行うこともできます。スタジオでフィールドをクリックして、プロパティペインを参照します。プロパティペインのテキストフィールドプロパティの下にパターンプロパティがあります。貼り付け#、## 0.または3つのドットをクリックし、ポップアップメニューのチェックボックスをオンにして1000で区切ります。
IReportで推奨される回答を試してみると、「ドル記号の後に違法な文字列ボディ文字」が表示されました。レポートを実行したとき。
次のようにドル記号をバックスラッシュでエスケープすることで簡単に修正できます。
new Java.text.DecimalFormat("\$ #,##0.00").format(Double.valueOf($F{le1_feeAmount}))