Jasper Reports - 从 JSON 解析双精度值
Jasper Reports - Parsing Double values from JSON
我在 Jaspersoft Studio 中使用 Jasper Reports 6.0.1。
我有一个包含子报表的报表。子报表正确地从主报表中获取数据集,其值为:
- 细绳
- 双
我在正确显示报表中的双精度值时遇到问题。
所以 Json 包含如下值:
'doubleValue': '0.431'
字段'doubleValue'在子报表中正确定义:
<field name="doubleValue" class="java.lang.Double">
<fieldDescription><![CDATA[doubleValue]]></fieldDescription>
</field>
'doubleValue' 似乎在报告中正确使用:
<textField pattern="#0.00">
<reportElement x="690" y="0" width="75" height="30" uuid="d265ebec-6fa7-421e-8d58-c7f2d32eea6b">
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<box>
<topPen lineWidth="0.1"/>
<bottomPen lineWidth="0.5"/>
<rightPen lineWidth="0.5"/>
</box>
<textElement>
<font size="9"/>
</textElement>
<textFieldExpression><![CDATA[$F{doubleValue}]]></textFieldExpression>
</textField>
doubleValue 在输出中的格式似乎正确:
'3.00'
但是:
字段值的来源是 3.41。
所以我深入检查了这些值,所有值的格式都为 'x.00',无论小数点后面是什么。
请帮帮我,我做错了什么?
我需要将数据正确导出到 XLSX(因此它知道单元格中有一个数字),为此我使用了以下选项:
<property name="net.sf.jasperreports.export.xls.detect.cell.type" value="true"/>
当小数点分隔符根据本地化 es 发生变化时,经常会出现这些问题。 .(点)在美国是小数点分隔符,但在意大利小数点分隔符是 ,(逗号)
但是 jasper 报告 (v 6) 应该可以毫无问题地处理这个问题,您的模式应该是美国格式,jasper 报告将以 Locale.getDefault()
格式导出(也在 excel 中应用正确的模式)。
所以您的 jrxml.没有问题。
但是请注意,JsonDataSource
将使用 Locale.getDefault()
格式,因此,如果您有意大利本地人,则 Double
号码 es。 12.234 将被解释为 12234(因此为千)。
在这种情况下,您需要将 Local 设置为 JsonDataSource
es.
JsonDataSource ds = new JsonDataSource(new File("example.json"));
ds.setLocale(Locale.US);
正确解析您的号码。
我在 Jaspersoft Studio 中使用 Jasper Reports 6.0.1。
我有一个包含子报表的报表。子报表正确地从主报表中获取数据集,其值为: - 细绳 - 双
我在正确显示报表中的双精度值时遇到问题。 所以 Json 包含如下值:
'doubleValue': '0.431'
字段'doubleValue'在子报表中正确定义:
<field name="doubleValue" class="java.lang.Double">
<fieldDescription><![CDATA[doubleValue]]></fieldDescription>
</field>
'doubleValue' 似乎在报告中正确使用:
<textField pattern="#0.00">
<reportElement x="690" y="0" width="75" height="30" uuid="d265ebec-6fa7-421e-8d58-c7f2d32eea6b">
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<box>
<topPen lineWidth="0.1"/>
<bottomPen lineWidth="0.5"/>
<rightPen lineWidth="0.5"/>
</box>
<textElement>
<font size="9"/>
</textElement>
<textFieldExpression><![CDATA[$F{doubleValue}]]></textFieldExpression>
</textField>
doubleValue 在输出中的格式似乎正确: '3.00'
但是: 字段值的来源是 3.41。 所以我深入检查了这些值,所有值的格式都为 'x.00',无论小数点后面是什么。
请帮帮我,我做错了什么?
我需要将数据正确导出到 XLSX(因此它知道单元格中有一个数字),为此我使用了以下选项:
<property name="net.sf.jasperreports.export.xls.detect.cell.type" value="true"/>
当小数点分隔符根据本地化 es 发生变化时,经常会出现这些问题。 .(点)在美国是小数点分隔符,但在意大利小数点分隔符是 ,(逗号)
但是 jasper 报告 (v 6) 应该可以毫无问题地处理这个问题,您的模式应该是美国格式,jasper 报告将以 Locale.getDefault()
格式导出(也在 excel 中应用正确的模式)。
所以您的 jrxml.没有问题。
但是请注意,JsonDataSource
将使用 Locale.getDefault()
格式,因此,如果您有意大利本地人,则 Double
号码 es。 12.234 将被解释为 12234(因此为千)。
在这种情况下,您需要将 Local 设置为 JsonDataSource
es.
JsonDataSource ds = new JsonDataSource(new File("example.json"));
ds.setLocale(Locale.US);
正确解析您的号码。