diff --git a/src/main/java/com/metaweb/gridworks/browsing/facets/ExpressionNumericRowBinner.java b/src/main/java/com/metaweb/gridworks/browsing/facets/ExpressionNumericRowBinner.java index 9185b8315..dd4008659 100644 --- a/src/main/java/com/metaweb/gridworks/browsing/facets/ExpressionNumericRowBinner.java +++ b/src/main/java/com/metaweb/gridworks/browsing/facets/ExpressionNumericRowBinner.java @@ -71,13 +71,16 @@ public class ExpressionNumericRowBinner implements RowVisitor { errorCount++; } else if (ExpressionUtils.isNonBlankData(value)) { if (value instanceof Number) { - numericCount++; - double d = ((Number) value).doubleValue(); - - int bin = (int) Math.floor((d - _index.getMin()) / _index.getStep()); - - bins[bin]++; + if (!Double.isInfinite(d) && !Double.isNaN(d)) { + numericCount++; + + int bin = (int) Math.floor((d - _index.getMin()) / _index.getStep()); + + bins[bin]++; + } else { + errorCount++; + } } else { nonNumericCount++; } diff --git a/src/main/java/com/metaweb/gridworks/browsing/facets/NumericBinIndex.java b/src/main/java/com/metaweb/gridworks/browsing/facets/NumericBinIndex.java index 1c575c2f1..889a91aae 100644 --- a/src/main/java/com/metaweb/gridworks/browsing/facets/NumericBinIndex.java +++ b/src/main/java/com/metaweb/gridworks/browsing/facets/NumericBinIndex.java @@ -122,7 +122,7 @@ public class NumericBinIndex { } protected void processValue(double v, List allValues) { - if (!Double.isInfinite(v)) { + if (!Double.isInfinite(v) && !Double.isNaN(v)) { _min = Math.min(_min, v); _max = Math.max(_max, v); allValues.add(v); diff --git a/src/main/java/com/metaweb/gridworks/browsing/filters/ExpressionNumberComparisonRowFilter.java b/src/main/java/com/metaweb/gridworks/browsing/filters/ExpressionNumberComparisonRowFilter.java index 019714d9c..5d5d25bbe 100644 --- a/src/main/java/com/metaweb/gridworks/browsing/filters/ExpressionNumberComparisonRowFilter.java +++ b/src/main/java/com/metaweb/gridworks/browsing/filters/ExpressionNumberComparisonRowFilter.java @@ -76,7 +76,12 @@ abstract public class ExpressionNumberComparisonRowFilter implements RowFilter { return _selectError; } else if (ExpressionUtils.isNonBlankData(v)) { if (v instanceof Number) { - return _selectNumeric && checkValue(((Number) v).doubleValue()); + double d = ((Number) v).doubleValue(); + if (Double.isInfinite(d) || Double.isNaN(d)) { + return _selectError; + } else { + return _selectNumeric && checkValue(d); + } } else { return _selectNonNumeric; }