X-Git-Url: https://mattmccutchen.net/measurements/measurements.git/blobdiff_plain/3f5430dbc58f8f3ffe9b509bdfe00a6b6d334a37..3a3b5f3c898112a691ed6bfe9e656ccf42207a2b:/src/net/mattmccutchen/measurements/Measurement.java diff --git a/src/net/mattmccutchen/measurements/Measurement.java b/src/net/mattmccutchen/measurements/Measurement.java index 1ddaa50..0e88986 100644 --- a/src/net/mattmccutchen/measurements/Measurement.java +++ b/src/net/mattmccutchen/measurements/Measurement.java @@ -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) {