It sounds like a bug. Can you get Drools source code and look at the unit
test for this to make sure your scenario works there? The file is:
Very easy to add your use case in there.
Let us know what you find.
2008/11/6 Marina <ppine7(a)yahoo.com>
I'm getting unexpected results when when using BigDecimal objects for
matching in rules.
I'm generating DRL in my code, using freemaker.
I have a RuleEngineNumericFact object which has two attributes:
Below is an example of a rule where I try to match a RuleEngineNumericFact
object based on the two attributes:
(RuleEngineNumericFact( propertyName == "somename" , propertyValue
== 10.8 ))
String ruleId = drools.getRule().getName();
Then I create a new RuleEngineNumericFact object and set its propertyValue
String stringValue = "10.8";
BigDecimal propertyValue = new BigDecimal(stringValue, new
(I also tried to use default precision settings by creating the BigDecimal
BigDecimal propertyValue = new BigDecimal(stringValue);
When I insert this fact into the rule engine - the rule does not get fired,
so the fact does not match.
One note: if the values are integeres (like, propertyValue == 100) - the
rule gets fired. So, it is only the floating point numbers that do not
I generate the DRL in my Java code, using freemaker, and I specify the
value that will be used in the rule for matching by calling toString()
method on a BigDecimal object that I get from my business code. The
toString() representation ends up to be the "10.8" value (for example).
According to the BigDecimal documentation, marshalling from/to the same
string representation shoudl still produce BigDecimal objects that will
return TRUE from the equals() method when compared.
any ideas why this is not working here?
How does Drools compare values of objects like BigDecimal?
rules-users mailing list
JBoss Drools Core Development
JBoss, a division of Red Hat @ www.jboss.com