From 70449cf7c8a85c5a3ea617b58de0a888bee899c0 Mon Sep 17 00:00:00 2001 From: David Huynh Date: Fri, 9 Apr 2010 21:59:50 +0000 Subject: [PATCH] Better error catching in toNumber function. Watch out for the string "Infinity" while importing data sets: don't parse it into a double. git-svn-id: http://google-refine.googlecode.com/svn/trunk@438 7d457c2a-affb-35e4-300a-418c747d4874 --- .../metaweb/gridworks/expr/functions/ToNumber.java | 12 +++++++++++- .../gridworks/importers/ImporterUtilities.java | 5 ++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/metaweb/gridworks/expr/functions/ToNumber.java b/src/main/java/com/metaweb/gridworks/expr/functions/ToNumber.java index 94d65dbd7..107dfeaa8 100644 --- a/src/main/java/com/metaweb/gridworks/expr/functions/ToNumber.java +++ b/src/main/java/com/metaweb/gridworks/expr/functions/ToNumber.java @@ -5,13 +5,23 @@ import java.util.Properties; import org.json.JSONException; import org.json.JSONWriter; +import com.metaweb.gridworks.expr.EvalError; import com.metaweb.gridworks.gel.Function; public class ToNumber implements Function { public Object call(Properties bindings, Object[] args) { if (args.length == 1 && args[0] != null) { - return args[0] instanceof Number ? args[0] : Double.parseDouble(args[0].toString()); + if (args[0] instanceof Number) { + return args[0]; + } else { + String s = args[0].toString(); + try { + return Double.parseDouble(s); + } catch (NumberFormatException e) { + return new EvalError("Cannot parse to number"); + } + } } return null; } diff --git a/src/main/java/com/metaweb/gridworks/importers/ImporterUtilities.java b/src/main/java/com/metaweb/gridworks/importers/ImporterUtilities.java index 31649182a..867d14aac 100644 --- a/src/main/java/com/metaweb/gridworks/importers/ImporterUtilities.java +++ b/src/main/java/com/metaweb/gridworks/importers/ImporterUtilities.java @@ -16,7 +16,10 @@ public class ImporterUtilities { } try { - return Double.parseDouble(text); + double d = Double.parseDouble(text); + if (!Double.isInfinite(d) && !Double.isNaN(d)) { + return d; + } } catch (NumberFormatException e) { } }