From dff870519ebd939f4ed584e9ae13986c85e386a5 Mon Sep 17 00:00:00 2001 From: David Huynh Date: Fri, 9 Apr 2010 05:24:46 +0000 Subject: [PATCH] Made numeric range index handle value.log() properly when value is 0 or negative. git-svn-id: http://google-refine.googlecode.com/svn/trunk@436 7d457c2a-affb-35e4-300a-418c747d4874 --- .../facets/ExpressionNumericRowBinner.java | 15 +++++++++------ .../browsing/facets/NumericBinIndex.java | 2 +- .../ExpressionNumberComparisonRowFilter.java | 7 ++++++- 3 files changed, 16 insertions(+), 8 deletions(-) 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; }