Jasper reports 忽略jasper十进制分隔符

Jasper reports 忽略jasper十进制分隔符,jasper-reports,format,double,Jasper Reports,Format,Double,在jasper报告中,我使用JSON数据源。 此数据源包含数字(例如159.994) 有一个类为java.lang.double(我们称之为“doubleField”)的字段,还有一个包含此字段和模式的文本字段(“#,##0.00·(brutto)”)。 模式运行良好(德国货币格式),但如果我只打印双字段的值,则预期输出将为“195,99”或“159.994”。 但实际上它是“159.994,00”或“159994.0” 有一种解决方案将报告的语言从“groovy”更改为“JavaScript”

在jasper报告中,我使用JSON数据源。 此数据源包含数字(例如159.994)

有一个类为
java.lang.double
(我们称之为“doubleField”)的字段,还有一个包含此字段和模式的文本字段(
“#,##0.00·(brutto)”
)。 模式运行良好(德国货币格式),但如果我只打印双字段的值,则预期输出将为“195,99”或“159.994”。 但实际上它是
“159.994,00”
“159994.0”

有一种解决方案将报告的语言从“groovy”更改为“JavaScript”,但这没有帮助,也不适用

有一种“快速脏”的解决方案(不快速),只需将JSON值作为字符串,然后在文本字段中将其转换为双精度。这个很好用,但它很脏,速度也不快


有什么想法吗?

我有一个Jasper报告的定义。我只是从报告定义中包含了一些我认为可能与你的问题相关的东西

首先,我有几个字段定义。以下是其中两个:

<field name="FundFixedBeginningBalance" class="java.lang.Double">
    <fieldDescription>
        <![CDATA[FundFixedBeginningBalance/FundFixedBeginningBalanceValue]]>
    </fieldDescription>
</field>
<field name="FundNonFixedBeginningBalance" class="java.lang.Double">
    <fieldDescription>
        <![CDATA[FundNonFixedBeginningBalance/FundNonFixedBeginningBalanceValue]]>
    </fieldDescription>
</field>

请注意,
textFieldExpression
元素中没有强制转换;只需将中的两个字段替换为
$F
,并将它们添加到一起(这样可以正确打印)。你在做什么不同的事情吗?

我不清楚问题出在哪里。你说图案很好,所以这不是问题。然后你说‘但事实上是159.994,00’或者"159994.0'. 那么是159.994,00还是159994.0?两种都印吗?当格式化输出正确时,为什么会出现这个问题?问题是:只有当字段是字符串并且我自己在文本字段中将其转换为double时,模式才有效。依我看,将字段声明为“double”而不是“string”并稍后强制转换会更干净……好的,这清楚地说明了问题所在。我将下一条评论作为答案发布,因为我无法获得评论中需要的所有文本和格式。我甚至不计算。相反,我只是写了一些类似的东西:
您的JSON看起来像什么?我的XML是这样的:
46401.54
。请注意,没有分隔千的字符,并且有分隔美分的句点。当Jasper使用美国格式时,您是否可能有JSON的欧洲格式(例如46.401,54或46401,54)和美国格式?对不起,意思是说“…Jasper认为您使用的是美国格式?”我注意到您说JSON包含如下数字:
159.994
。这与我的XML中包含的数字不同。使用支持正则表达式的文本编辑器,您可以修改JSON,使其看起来像“美国”JSON(格式为
159994
159994.00
)并查看Jasper如何处理它。也许问题与JSON的构造有关。我们使用
“value”:1872.37
。这不是欧洲格式,而是“标准”JSON。不幸的是,有些值有更多的小数,如
“value2”:1969.71999998
。没有小数,一切正常:
“value3”:42
。我不知道我们可以在JSON中更改什么,因为我试图在Jasper中更改区域设置,但没有任何效果。
    <textField pattern="#,##0.00 ;(#,##0.00)" isBlankWhenNull="true">
        <reportElement positionType="Float" x="368" y="52" width="100" height="14" uuid="deac984d-39b8-49f4-b4d2-28e66681c098">
            <property name="local_mesure_unitx" value="pixel"/>
            <property name="com.jaspersoft.studio.unit.x" value="px"/>
        </reportElement>
        <textElement textAlignment="Right"/>
        <textFieldExpression><![CDATA[$F{FundFixedBeginningBalance} + $F{FundNonFixedBeginningBalance}]]></textFieldExpression>
    </textField>