Various fixes and enhancements:
[measurements/measurements.git] / src / net / mattmccutchen / measurements / Measurement.java
index 1ddaa50..0e88986 100644 (file)
@@ -23,9 +23,11 @@ public class Measurement {
                        int space = str.indexOf(' ');
                        String numPart;
                        String unitPart;
+                       boolean forceExact = false;
                        if (space == -1) {
                                numPart = str;
                                unitPart = "";
+                               forceExact = true;
                        } else {
                                numPart = str.substring(0, space);
                                unitPart = str.substring(space + 1);
@@ -33,11 +35,13 @@ public class Measurement {
                        double num;
                        double unc;
                        if (numPart.charAt(numPart.length() - 1) == exactIndicator) {
+                               forceExact = true;
                                numPart = numPart.substring(0, numPart.length() - 1);
+                       }
+                       num = Double.parseDouble(numPart);
+                       if (forceExact)
                                unc = 0;
-                               num = Double.parseDouble(numPart);
-                       } else {
-                               num = Double.parseDouble(numPart);
+                       else {
                                // Determine sig figs
                                int echar = numPart.indexOf('e');
                                if (echar == -1) {
@@ -113,7 +117,7 @@ public class Measurement {
        }
        
        private static double expOf(double d) {
-               return (d == 0) ? 0 : Math.floor(Math.log10(d));
+               return (d == 0) ? 0 : Math.floor(Math.log10(Math.abs(d)));
        }
        
        private static int sigFigsOf(double num, double unc) {