diff options
Diffstat (limited to 'altoslib')
| -rw-r--r-- | altoslib/AltosGPS.java | 6 | ||||
| -rw-r--r-- | altoslib/AltosParse.java | 21 | ||||
| -rw-r--r-- | altoslib/AltosUnits.java | 21 | 
3 files changed, 36 insertions, 12 deletions
diff --git a/altoslib/AltosGPS.java b/altoslib/AltosGPS.java index 2139efb2..e3aee4ea 100644 --- a/altoslib/AltosGPS.java +++ b/altoslib/AltosGPS.java @@ -195,10 +195,10 @@ public class AltosGPS implements Cloneable, Serializable {  			lon = AltosParse.parse_coord(words[i++]);  			alt = AltosParse.parse_int(words[i++]);  			if (version > 1 || (i < words.length && !words[i].equals("SAT"))) { -				ground_speed = AltosParse.parse_double(AltosParse.strip_suffix(words[i++], "m/s(H)")); +				ground_speed = AltosParse.parse_double_net(AltosParse.strip_suffix(words[i++], "m/s(H)"));  				course = AltosParse.parse_int(words[i++]); -				climb_rate = AltosParse.parse_double(AltosParse.strip_suffix(words[i++], "m/s(V)")); -				hdop = AltosParse.parse_double(AltosParse.strip_suffix(words[i++], "(hdop)")); +				climb_rate = AltosParse.parse_double_net(AltosParse.strip_suffix(words[i++], "m/s(V)")); +				hdop = AltosParse.parse_double_net(AltosParse.strip_suffix(words[i++], "(hdop)"));  				h_error = AltosParse.parse_int(words[i++]);  				v_error = AltosParse.parse_int(words[i++]);  			} diff --git a/altoslib/AltosParse.java b/altoslib/AltosParse.java index 2fb69c15..a8b02b56 100644 --- a/altoslib/AltosParse.java +++ b/altoslib/AltosParse.java @@ -17,6 +17,7 @@  package org.altusmetrum.altoslib_6; +import java.util.*;  import java.text.*;  public class AltosParse { @@ -40,11 +41,23 @@ public class AltosParse {  		}  	} -	public static double parse_double(String v) throws ParseException { +	static NumberFormat nf_locale = NumberFormat.getInstance(); + +	static NumberFormat nf_net = NumberFormat.getInstance(Locale.ROOT); + +	public static double parse_double_locale(String str) throws ParseException {  		try { -			return Double.parseDouble(v); -		} catch (NumberFormatException e) { -			throw new ParseException("error parsing double " + v, 0); +			return nf_locale.parse(str.trim()).doubleValue(); +		} catch (ParseException pe) { +			throw new ParseException("error parsing double " + str, 0); +		} +	} + +	public static double parse_double_net(String str) throws ParseException { +		try { +			return nf_net.parse(str.trim()).doubleValue(); +		} catch (ParseException pe) { +			throw new ParseException("error parsing double " + str, 0);  		}  	} diff --git a/altoslib/AltosUnits.java b/altoslib/AltosUnits.java index f6e34e77..e266b243 100644 --- a/altoslib/AltosUnits.java +++ b/altoslib/AltosUnits.java @@ -17,6 +17,8 @@  package org.altusmetrum.altoslib_6; +import java.text.*; +  public abstract class AltosUnits {  	public abstract double value(double v, boolean imperial_units); @@ -29,13 +31,22 @@ public abstract class AltosUnits {  	public abstract int show_fraction(int width, boolean imperial_units); -	public double parse(String s, boolean imperial_units) throws NumberFormatException { -		double v = Double.parseDouble(s); +	public double parse_locale(String s, boolean imperial_units) throws ParseException { +		double v = AltosParse.parse_double_locale(s); +		return inverse(v, imperial_units); +	} + +	public double parse_net(String s, boolean imperial_units) throws ParseException { +		double v = AltosParse.parse_double_net(s);  		return inverse(v, imperial_units);  	} -	public double parse(String s) throws NumberFormatException { -		return parse(s, AltosConvert.imperial_units); +	public double parse_locale(String s) throws ParseException { +		return parse_locale(s, AltosConvert.imperial_units); +	} + +	public double parse_net(String s) throws ParseException { +		return parse_net(s, AltosConvert.imperial_units);  	}  	public double value(double v) { @@ -105,4 +116,4 @@ public abstract class AltosUnits {  	public String say_units(double v) {  		return say_units(v, AltosConvert.imperial_units);  	} -}
\ No newline at end of file +}  | 
