Java Jasper报告-数字格式问题

Java Jasper报告-数字格式问题,java,jasper-reports,bigdecimal,Java,Jasper Reports,Bigdecimal,我在Jaspersoft Studio 6.11.0+Java lib net.sf上遇到了一个奇怪的问题。jasperreports 6.11.0 我正在测试一个简单的报告,从Studio生成的报告可以,但从Java生成的报告不行 这是从Jaspersoft Studio生成的 这是由Java代码生成的 Java生成 从Java代码中,Pojo实例充满数据,用Jackson进行编组,用JRXmlUtils解析成org.w3c.dom.Document,然后作为参数\u XML\u data

我在Jaspersoft Studio 6.11.0+Java lib net.sf上遇到了一个奇怪的问题。jasperreports 6.11.0

我正在测试一个简单的报告,从Studio生成的报告可以,但从Java生成的报告不行

这是从Jaspersoft Studio生成的

这是由Java代码生成的

Java生成

从Java代码中,Pojo实例充满数据,用Jackson进行编组,用JRXmlUtils解析成org.w3c.dom.Document,然后作为参数\u XML\u data\u Document发送给Jasper

JasperReport-JasperReport=jasperreportils.generateJSperReportInstance(数据模型);
StringWriter编写器=新的StringWriter();
JAXBContext context=JAXBContext.newInstance(ContoEconomicoReport.class);
context.createMarshaller().marshal(数据模型,编写器);
String str=writer.toString();
系统输出打印项次(str);
Document Document=JRXmlUtils.parse(新的ByteArrayInputStream(str.getBytes());
parameters.put(JRXPathQueryExecuterFactory.PARAMETER\u XML\u DATA\u DOCUMENT,DOCUMENT);
JasperPrint jPrint=JasperFillManager.fillReport(jasperReport,参数);
执行上述代码将生成报告,其中数字(BigDecimal)打印格式错误(左移2位)

Jaspersoft报告生成

从上面的代码中,使用syso打印的字符串是


2564894.01
25648946.21
25648.01
如果它接受该字符串,将其放入xml文件中,并将其用作Jaspersoft Studio中的数据适配器,则生成的报告将显示预期值

我已经检查了语言环境,Java和Studio都使用相同的语言环境

以下是报告:


我自己回答问题,因为我找到了解决问题的方法:)

我很确定它与语言环境有关,因为在意大利,默认的十进制分隔符是逗号而不是点,但甚至是强制的

parameters.put(jrparmeter.REPORT\u LOCALE,LOCALE.US)
没有解决任何问题

然后我发现,因为我通过

JRXPathQueryExecuterFactory.PARAMETER\u XML\u数据\u文档
我也需要设置

JRXPathQueryExecuterFactory.XML\u语言环境
为了让报表以预期的方式评估输入数据,现在它就像一个符咒:D

遵循固定的代码段

JasperReport-JasperReport=jasperreportils.generateJSperReportInstance(数据模型);
StringWriter编写器=新的StringWriter();
JAXBContext context=JAXBContext.newInstance(ContoEconomicoReport.class);
context.createMarshaller().marshal(数据模型,编写器);
String str=writer.toString();
Document Document=JRXmlUtils.parse(新的ByteArrayInputStream(str.getBytes());
parameters.put(JRXPathQueryExecuterFactory.PARAMETER\u XML\u DATA\u DOCUMENT,DOCUMENT);
parameters.put(JRXPathQueryExecuterFactory.XML_LOCALE,LOCALE.US);
JasperPrint jPrint=JasperFillManager.fillReport(jasperReport,参数);