Jump to content
Changes to the Jaspersoft community edition download ×

Error casting String to a BigDecimal


Recommended Posts



I'm encountering the following error when I run a report. My deployment server key info is:


Suse Linux Enterprise Edition

Apache Tomcat 5.5.17

Java 1.5

Jasper Report version 1.2.5

I created the report using iReport 1.2.5.


The error is:

javax.faces.el.EvaluationException: java.lang.Exception: Error evaluating expression : Source text : new BigDecimal($F{lastYearSales})


Here is the situation. The report gets it's data from a custom Java Bean that returns a array of String objects. The report is a purchase history report that breaks on the Customer's name. Initially, no sub-totals were needed, but now the user's want to see a sub-total. Rather than rewrite the bean to return a multi data type array, we just removed the currency format from the dollar Strings and I am trying to case the String object to a BigDecimal object using the following in my Variable Expression: new BigDecimal($F{dollars}). I have even tried: new java.math.BigDecimal($F{dollars}). Both work just fine when I run the report from iReport. When I run the report from my JSF application, I get the aforementioned error.


Does anyone have any suggestions?


Thanks in advance.



Link to comment
Share on other sites

  • Replies 2
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

we made a helper class for that, because the expression were too long otherwise:


just make a class that is within the classpath at runtime:


as FieldExpression I use:







public static BigDecimal stringToBigDecimal(String str) {
return MathLib.stringToBigDecimal(str, "###,###,##0.00", 2);

public static BigDecimal stringToBigDecimal(String str, String format, int nachkommastellen) {
if (str.length() > 0) {
DecimalFormat df = new DecimalFormat(format);
Number x;
try {
x = df.parse(str);
BigDecimal y = new BigDecimal(Double.toString(x.doubleValue()));
y = round(y, nachkommastellen);
return y;
catch (ParseException e) {
return new BigDecimal(0);
else {
return new BigDecimal(0);

public static BigDecimal round(BigDecimal zahl, int nachkommastellen) {
if (zahl == null) {
zahl = BigDecimal.ZERO;
return zahl.setScale(nachkommastellen, BigDecimal.ROUND_HALF_UP);




Post edited by: CBox, at: 2006/11/09 16:16

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Create New...