2015-04-14 77 views
0

在jasper报告中,我使用JSON数据源。 此数据源包含数字(例如159.994)。忽略jasper小数分隔符

有一个类java.lang.double(我们称之为“doubleField”)的字段以及带有该字段和模式("#,##0.00 ¤ (brutto)")的文本字段。 该模式工作正常(德国货币格式),但如果我只打印出doubleField的值,预期的输出将是“195,99”或“159.994”。 但实际上它是"159.994,00""159994.0"

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

有一个“快速&脏”的解决方案(没有很快),只是将JSON值作为字符串,然后在文本字段中将其转换为双精度值。这工作正常,但它很脏,并不是很快。

任何想法?

+0

我不清楚问题是什么。你说模式工作正常,所以这不是问题。然后你说'但实际上它是“159.994,00”或“159994.0”,那么它是什么,159.994,00或159994.0?它是否同时打印?为什么当格式化输出正确时出现问题? – mbmast

+0

问题是:该模式只适用于如果该字段是一个字符串,我在文本字段中将其强制转换为双精度型。 恕我直言,将字段声明为“double”而不是“string”会更清洁,并且以后再投... – hering

+0

好的,这就清楚地说明了这个问题。我发布我的下一条评论作为回答,因为我无法在评论中获得所有我需要的文本和格式 – mbmast

回答

0

我有一个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> 

请注意两者如何定义为class="java.lang.Double"。我使用的是XPath表达式,因为我的数据是用XML编写的,但这与JSON没有根本的区别。后来,在报表布局部分,我有:

<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> 

通知存在textFieldExpression元素中没有铸造;只需用$F替换两个字段并将它们添加在一起(并正确打印)即可。你在做一些不同的事情吗?

+0

我甚至没有计算。相反,我只是写了类似于: '<![CDATA [$ F {FundFixedBeginningBalance}]]>' – hering

+0

您的JSON的外观如下所示:我的XML如下所示:\t \t \t \t' 46401.54'。请注意,没有人物将数千人分开,并且存在分隔仙的时期。你有可能使用欧洲格式的JSON(例如46.401,54或46401,54)和美国人,而贾斯珀的东西你使用的是美国格式? – mbmast

+0

对不起,本意是说“...... Jasper认为你使用的是美式格式?” – mbmast