Java 如何在iReport中用逗号替换点?

Java 如何在iReport中用逗号替换点?,java,jasper-reports,Java,Jasper Reports,首先,iReport需要这个问题。 我必须用逗号代替点符号。我的问题是数据库中字段的类型是BigDecimal,因此不存在任何替换方法。 因此,我将类型更改为字符串,但随后我收到以下消息: it.businesslogic.ireport.gui.logpane.ProblemItem@820dc5 The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from required .clas

首先,iReport需要这个问题。 我必须用逗号代替点符号。我的问题是数据库中字段的类型是BigDecimal,因此不存在任何替换方法。 因此,我将类型更改为字符串,但随后我收到以下消息:

it.businesslogic.ireport.gui.logpane.ProblemItem@820dc5 The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from required .class files
我的代码如下所示:

new String($F{gewicht}.toString()).replace(".",",")

我能做什么?

尝试输入以下文本表达式:

$F{gewicht}.toString().replace(".",",")
如果这不起作用,另一种选择是在Java层中处理格式化,例如

BigDecimal bd = new BigDecimal(1.2345);
NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMAN);
DecimalFormat df = (DecimalFormat)nf;
String gewicht = df.format(bd);

这里我使用了欧洲-德国语言环境,小数点和逗号与美国和其他一些地方的角色相反。您可能需要同时处理逗号和小数点。

尝试输入以下文本表达式:

$F{gewicht}.toString().replace(".",",")
如果这不起作用,另一种选择是在Java层中处理格式化,例如

BigDecimal bd = new BigDecimal(1.2345);
NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMAN);
DecimalFormat df = (DecimalFormat)nf;
String gewicht = df.format(bd);

这里我使用了欧洲-德国语言环境,小数点和逗号与美国和其他一些地方的角色相反。您可能需要同时处理逗号和小数点。

您可以使用文本字段模式:

<textField pattern="#,##0.00 €">

这将为您提供德语格式。在这种情况下,这适用于欧元值,但如果需要,您可以跳过欧元并添加更多描述:

<textField pattern="#,####0.0000">

另一种方法是:

新的十进制格式(“#,##0.00欧元”),
新的十进制符号(Locale.GERMANY))。

格式(Double.parseDouble($F{gewicht}))
您可以使用文本字段模式:

<textField pattern="#,##0.00 €">

这将为您提供德语格式。在这种情况下,这适用于欧元值,但如果需要,您可以跳过欧元并添加更多描述:

<textField pattern="#,####0.0000">

另一种方法是:

新的十进制格式(“#,##0.00欧元”),
新的十进制符号(Locale.GERMANY))。

格式化(Double.parseDouble($F{gewicht}))

以绕过此问题:无法解析java.lang.CharSequence类型。它是从必需的.class文件间接引用的

您可以设置新的十进制格式,如: 新的DecimalFormat(“#,###0.00€”,新的DecimalFormatSymbols(Locale.GERMANY)).format(Double.parseDouble($F{gewicht}))


感谢@hering绕过这个问题:java.lang.CharSequence类型无法解决。它是从必需的.class文件间接引用的

您可以设置新的十进制格式,如: 新的DecimalFormat(“#,###0.00€”,新的DecimalFormatSymbols(Locale.GERMANY)).format(Double.parseDouble($F{gewicht}))



谢谢@hering

Nice,如果示例是
newbigdecimal(“1.2345”)(精度4)与1.2345(没有可由java确定的精度)相反。@Tim Biegeleisen我尝试过它,它可以工作,但错误消息是相同的。第二个解决方案:我在哪里可以找到Java层?谢谢。我指的是生成Jasper报告的Java代码。如果示例是
newBigDecimal(“1.2345”)(精度4)与1.2345(没有可由java确定的精度)相反。@Tim Biegeleisen我尝试过它,它可以工作,但错误消息是相同的。第二个解决方案:我在哪里可以找到Java层?谢谢。我指的是生成Jasper报告的Java代码。但是您需要格式化一个数字吗?看起来像是一个,您在jasper Report中使用了区域设置和模式,但是您需要格式化一个数字吗?好像是一个,你在jasper Report中使用区域设置和模式谢谢,我一开始试过这个。但这并没有改变任何事情@heringWe将其用于double值,因此我们需要将其转换为double,这样才能产生任何效果。虽然变量是一个双精度值,但我们需要强制转换ist
Double.parseDouble($F{gewicht})
我对Double-to有这个问题,例如cust\u kost\ges字段类型java.lang.Double;文本字段表达式类java.lang.Double;模式#,##0.00,我的输出是120.00欧元而不是120,00欧元如果您的数据提供程序是JSON,我建议将字段类型更改为String,并在需要时将其转换为Double,我们在使用JSON和Double字段时遇到问题。您还可以尝试的是
new DecimalFormat(“#,##0.00€“),new DecimalFormatSymbols(Locale.GERMANY)).format(Double.parseDouble($F{gewicht}))
我在上面的答案中添加了这种方法。欢迎您。请随意接受正确的答案:)谢谢,我一开始就试过了。但这并没有改变任何事情@heringWe将其用于double值,因此我们需要将其转换为double,这样才能产生任何效果。虽然变量是一个双精度值,但我们需要强制转换ist
Double.parseDouble($F{gewicht})
我对Double-to有这个问题,例如cust\u kost\ges字段类型java.lang.Double;文本字段表达式类java.lang.Double;模式#,##0.00,我的输出是120.00欧元而不是120,00欧元如果您的数据提供程序是JSON,我建议将字段类型更改为String,并在需要时将其转换为Double,我们在使用JSON和Double字段时遇到问题。您还可以尝试的是
new DecimalFormat(“#,##0.00€“),new DecimalFormatSymbols(Locale.GERMANY)).format(Double.parseDouble($F{gewicht}))
我在上面的答案中添加了这种方法。欢迎您。请随意接受正确的答案:)