JasperReports/IReport

MScalli

Erfahrenes Mitglied
Hi Leutz.
Ich habe einen Report mit IReport erstellt und will eine Zeile nur dann anzeigen wenn mein feld ($F{kart_menge10) NICHT 0 ist.
Dieses kommt aus einer Datenbank und ist vom Typ BigDecimal.
eigentlich sollte es doch so gehen.. also diesen Code bei "Drucken wenn Ausdruck"
einfügen. Aber das will einfach nicht..
kann mir irgendwer helfen

so gehts nicht
Code:
( $F{kart_menge10}==new BigDecimal(0) ? Boolean.FALSE : Boolean.TRUE )

so auch nicht
Code:
( $F{kart_menge10}==BigDecimal.ZERO ? Boolean.FALSE : Boolean.TRUE )

heisst wenn das Feld vom Typ BigDecimal 0 oder 0.00(<-- das ist glaub mein Problem) ist FALSE zurück geben, sonst TRUE.
 
Mal eine Frage von welchem Typ ist denn Dein Feld?
ist es ein String dann müstest Du es vermutlich umwandeln in BigDecimal.
ist es schon ein BigDecimal... dann würde ich es mal mit BigDecimal.compareTo(BigDecimal nummer) versuchen.

Grüße und gutes Gelingen

Takidoso

Nachtrag: vielleicht hilft Dir ja auch schon die equals-Mehtode weiter
 
Das Feld das ich vergleichen will ist ein BigDecimal.
Und ich will einfach abfragen ob der wert 0 ist.
Aber irgendwie geht das nicht.
0 nimmt er gar nicht und bei 0.00 komme ich nicht auf das gewünschte ergebnis.
heist ob jetzt 1.23 oder 0.00 drin steht er liefert immer das selbe zurück.

ich müsste eigentlich nur TRUE zurück liefern wenn die Zahl 0.00 ist.
nur das erweist sich schwerer als man denkt
:(
 
Hi
Wieso 0.00 und nicht 0.0? Haben die BigDecimals in dem Feld $F{kart_menge10} die Auflösung von zwei Dezimalstellen?

Hast du takidosos Vorschlag (compareTo) ausprobiert? Scheint das einzig Wahre zu sein:
compareTo

public int compareTo(BigDecimal val)

Compares this BigDecimal with the specified BigDecimal. Two BigDecimals that are equal in value but have a different scale (like 2.0 and 2.00) are considered equal by this method. This method is provided in preference to individual methods for each of the six boolean comparison operators (<, ==, >, >=, !=, <=). The suggested idiom for performing these comparisons is: (x.compareTo(y) <op> 0), where <op> is one of the six comparison operators.

Parameters:
val - BigDecimal to which this BigDecimal is to be compared.
Returns:
-1, 0 or 1 as this BigDecimal is numerically less than, equal to, or greater than val.

Das hier klappt bei mir:
Java:
System.out.println(new BigDecimal(-0.0).compareTo(new BigDecimal(0.00))==0? "true": "false");

Gruss
 
Das Feld das ich vergleichen will ist ein BigDecimal.
Und ich will einfach abfragen ob der wert 0 ist.
Aber irgendwie geht das nicht.
0 nimmt er gar nicht und bei 0.00 komme ich nicht auf das gewünschte ergebnis.
heist ob jetzt 1.23 oder 0.00 drin steht er liefert immer das selbe zurück.

ich müsste eigentlich nur TRUE zurück liefern wenn die Zahl 0.00 ist.
nur das erweist sich schwerer als man denkt
:(

hast Du es denn schon mit meinem obigem Vorschlag experimentiert? Benutze nicht den Operator == sondern die Routine equals oder die Routine compareTo
Der Grund warum es mit dem == Operator nicht geht ist, dass Du damit die Identität der Objekte abfragst (genauso wie bei Strings) daher benötigst Du hier eine der dafür vorgesehenen Vergleichsroutinenen!
 
Zuletzt bearbeitet:
o mann.. endlich.. vielen vielen dank leutz.

so gehts
Code:
new Boolean(($F{kart_menge10}.compareTo(new BigDecimal(0.00))==0 ? "false": "true"))

aber mal ne Frage. WIe oder wo lässt du dir das im IReport mit System.out.println() anzeigen... wenn ich das könnte hätte ich warscheinlich net soviel Probs^^

und warum man false und true als String zurück gibt ist mir ehrlich gesagt nicht ganz klar!
Na Ok.. bei IReport ist mir ehrlich gesagt fast nichts wirklich klar :(
 
lol
Das habe ich natürlich nicht in iReport gemacht.
In iReport ist
Java:
($F{kart_menge10}.compareTo(new BigDecimal(0.00))==0 ? Boolean.FALSE : Boolean.TRUE)
natürlich sinnvoller ;)
Sonst hast du da noch einen cast von String zu Boolean. Unnötiger Overhead.

Dachte das wäre klar ^^

Gruss
 
o mann.. endlich.. vielen vielen dank leutz.

so gehts
Code:
new Boolean(($F{kart_menge10}.compareTo(new BigDecimal(0.00))==0 ? "false": "true"))

aber mal ne Frage. WIe oder wo lässt du dir das im IReport mit System.out.println() anzeigen... wenn ich das könnte hätte ich warscheinlich net soviel Probs^^

und warum man false und true als String zurück gibt ist mir ehrlich gesagt nicht ganz klar!
Na Ok.. bei IReport ist mir ehrlich gesagt fast nichts wirklich klar :(

Das ist weniger eine Frage von IReports, mehr eine Frage von Java. Der Konstruktor für Boolean bietet die Möglichkeit auch mit den Strings "true" und "false" zu arbeiten. Bedeutet aber wie schon von jeipack erwähnt einen gewissen Overhead und sollte besser nur dann verwendet werden, wenn es nicht anders geht.
Schau doch mal in die Sourcen der Klasse Boolean nach, dann siehst Du auch warum sowohl Deine als auch jeipacks Lösung geht und warum jeipacks optimierter ist.
BTW: Jeipack hat in seinem 1. Vorschlag keinen Code in IReport bzw JasperReport integriert, sondern sein Beispiel geht von reinem Java aus.
 
Ich tu mich sehr sehr schwer mit IReport.

mit Boolean.FALSE wollt ich es schon zu beginn machen :)
Wie gasagt, mit java komm ich ziemlich gut klar, aber im IReport abfragen oder bedingungen zu formulieren ist ne Sache für sich^^

Dann markier ich den Thread mal als erledigt und sag noch mal vielen dank euch zweien das ihr euch auch noch die Zeit genommen habt mir das zu erklären :)

gruss
MScalli
 

Neue Beiträge

Zurück