Skip to content

Commit aec7fb5

Browse files
committed
fixes #1146 A double value 0.0d should be evaluated as false. BigDecimal#equals() is too strict.
1 parent dd7e1fc commit aec7fb5

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

src/main/java/org/apache/ibatis/scripting/xmltags/ExpressionEvaluator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public boolean evaluateBoolean(String expression, Object parameterObject) {
3434
return (Boolean) value;
3535
}
3636
if (value instanceof Number) {
37-
return !new BigDecimal(String.valueOf(value)).equals(BigDecimal.ZERO);
37+
return new BigDecimal(String.valueOf(value)).compareTo(BigDecimal.ZERO) != 0;
3838
}
3939
return value != null;
4040
}

src/test/java/org/apache/ibatis/builder/xml/dynamic/ExpressionEvaluatorTest.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,13 @@
1515
*/
1616
package org.apache.ibatis.builder.xml.dynamic;
1717

18+
import static org.junit.Assert.*;
19+
1820
import java.util.HashMap;
1921

2022
import org.apache.ibatis.domain.blog.Author;
2123
import org.apache.ibatis.domain.blog.Section;
2224
import org.apache.ibatis.scripting.xmltags.ExpressionEvaluator;
23-
24-
import static org.junit.Assert.assertEquals;
25-
2625
import org.junit.Test;
2726

2827
public class ExpressionEvaluatorTest {
@@ -65,6 +64,15 @@ public void shouldReturnFalseIfZero() {
6564
assertEquals(false, value);
6665
}
6766

67+
@Test
68+
public void shouldReturnFalseIfZeroWithScale() {
69+
class Bean {
70+
@SuppressWarnings("unused")
71+
public double d = 0.0d;
72+
}
73+
assertFalse(evaluator.evaluateBoolean("d", new Bean()));
74+
}
75+
6876
@Test
6977
public void shouldIterateOverIterable() {
7078
final HashMap<String, String[]> parameterObject = new HashMap<String, String[]>() {{

0 commit comments

Comments
 (0)