2016-04-14 123 views
0

起初这个问题是iReport需要的。 我必须用逗号替换点号。我的问题是我们的数据库字段的类型是BigDecimal und因此不存在任何替换方法。 所以我改变了类型为String,但后来我得到这个消息:我如何用iReport中的逗号替换点?

[email protected] The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from required .class files 

我的代码如下所示:

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

我能做些什么?

+1

但是你需要格式化一个数字吗?看起来像一个[xy问题](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem),你使用区域设置和模式在碧玉报告 –

回答

0

您可以使用文本框模式:

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

这会给你的德国格式。在这种情况下,这€值,但你可以跳过€如果想添加更多descimals:

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

另一种方法对子级是:

new DecimalFormat("#,##0.00 €", new DecimalFormatSymbols(Locale.GERMANY)). format(Double.parseDouble($F{gewicht}))

+0

谢谢,我起初尝试过。但它不会改变任何事情。 @hering –

+0

我们使用这个值作为double值,所以我们需要将它转换为double值,然后才会有效果。虽然变量是一个双精度值,但我们需要投入ist。 'Double.parseDouble($ F {gewicht})' – hering

+0

我有这个问题, cust_kost_ges字段类型java.lang.Double; 文本字段表达式类java.lang.Double; 模式#,## 0.00 和我的输出是例如120。00€不是120,00€ –

1

尝试输入以下为文字表达:

$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); 

在这里,我已经使用了欧洲德语区域,其中小数点和逗号从他们在美国和其他一些地方什么互换角色。你可能想要处理逗号和小数点。

+0

尼斯,甚至更好,当这个例子会是新的BigDecimal(“1.2345”);'(精度4),而不是1.2345(java不能确定精度)。 –

+0

@蒂姆Biegeleisen我试过了,它的工作原理,但错误信息是一样的。第二种解决方案:我在哪里可以找到Java层? 谢谢。 –

+0

我指的是生成Jasper报告的Java代码。 –

0

绕开的问题:该类型的Java .lang.CharSequence无法解析。 。 新的DecimalFormat( “#,## 0.00€”,新的DecimalFormatSymbols(Locale.GERMANY))格式(Double.parseDouble($:这是间接需要的.class文件

您可以设置一个新的DecimalFormat喜欢引用F {gewicht}))

谢谢@hering